클래스(Classes)
✒️ 2025-05-15 13:13 내용 수정
객체
프로그램에서의 object : 고유한 속성 및 기능을 가지는 것. 프로그램적으로 구현이 가능하거나 구현 가치가 있는것
- ex) 자동차, 학교, 컴퓨터 등
- 상태를 표현할 수 있고, 속성을 가질 수 있는 모든 것
- 너무 추상적인 개념들은 프로그래밍 화 하기 어려움(ex: 공기, 분위기 등)
- 클래스(Class)에서 정의한 것을 토대로 메모리에 할당된 것
- 객체는 고유의 속성(attribute)을 가지고, 클래스에서 정의한 행위(behavior)를 수행할 수 있다.
클래스
객체를 표현하기 위한 설명 양식이자, 객체 지향 프로그램의 기본적인 사용자 정의 데이터형
- 클래스 이름은 표기 규칙#1. Pascal 표기법을 따른다.
- 같은 종류(혹은 문제)의 집단에 속하는 속성(attribute)과 행위(behavior)를 정의한 것
- 객체를 생성하기 위한 설명서, 클래스를 기반으로 객체를 생성해야 한다.
- 하나의 클래스로 여러 개의 객체를 생성할 수 있다.
- ex) 자동차 클래스 : 종류, 크기 등의 속성과 운전 등의 행위
- 클래스는 다른 클래스 또는 외부 요소와 독립적으로 디자인해야 한다.
- 서로 다른 클래스는 다른 속성과 행위를 정의한다.
- Java에서 프로그램을 개발하는 단위. 소스 파일 이름은
main class(public class)이름과 동일해야 함 - 보통 접근제한자(제어자)로 public 사용
- 클래스를 만들 때 변수에는 자동으로 기본값이 들어간다.
- 클래스 내에 생성된 참조용 클래스에는 접근제한자를 붙일 수 없다.
- 클래스 이름의 파일이 존재할 때 그 파일에서 접근제한자를 설정할 수 있다.
public class ClassName {
// 속성 : 필드(Field)
int field1;
String field2;
//********************
// 생성자(Constructor)
public ClassName() {
}
//********************
// 기능 : 메서드(Method)
public void method1() {
}
}
1. 클래스의 구성
- 클래스 = 필드(field) + 메서드(method), 그리고 생성자(constructor)
- 클래스 멤버 : 필드와 메서드
- 필드(Fields) : 객체의 속성을 표현, 클래스에 포함된 변수(variable)이자 멤버 변수
- 객체가 가져야 할 데이터의 상태를 저장하는 변수
- 메서드(Methods) : 객체의 행동을 표현, 작업 수행을 위한 명령문 집합
- 필드(Fields) : 객체의 속성을 표현, 클래스에 포함된 변수(variable)이자 멤버 변수
2. 클래스의 종류
- 실행용 : main() 처럼 실행을 담는 클래스
- 다른 클래스에서 사용되지 않는다.(import X)
- main class는 최대한 간결하게 작성하고, 다른 기능을 참고용 클래스에 작성하는 것이 좋다.
- 프레임워크 및 라이브러리 : Math, System, Arrays ... 처럼 기능 중심적 역할 클래스
- 객체 생성용 : 다른 클래스에서 사용할 목적으로 선언되는 클래스
- 데이터용 : 데이터를 저장하는 클래스
- 이 외에도 추상클래스, 인터페이스, 싱글톤 클래스, 유틸리티 클래스, 에넘(Enum) 등이 있다.
- 하나의 클래스에서 두 가지 용도의 역할을 모두 수행할 수 있지만, 모듈화(객체 지향 프로그램의 특징)를 위해 분리 시키는 것이 좋다.
3. 클래스가 메모리에 올라가는 시점
- 객체를 생성했을 때
- static 변수의 호출 : 클래스 변수를 호출하면, 객체화하지 않아도 클래스가 호출된다.
- static 메서드 호출 : static 변수를 호출한 것과 같이 클래스가 로드된다.
- 내부 클래스의 호출 : 내부클래스의 객체를 생성하기 위해서는 외부 클래스의 객체를 먼저 생성해야 한다.
인스턴스
클래스로부터 객체를 선언하는 것 / 클래스의 객체화
-
메모리에 할당된 객체
- 인스턴스는 Dynamic binding으로 Heap 영역에 저장된다.
- 필드(Fields)#변수의 종류, 메모리 구조 참고.
- 인스턴스를 참조하는 참조 변수는 Stack 영역에 저장된다.
- ex) 자동차 클래스에서 myCar 라는 객체를 선언 후 이용해보자
- 인스턴스는 Dynamic binding으로 Heap 영역에 저장된다.
-
하나의 클래스로부터 여러 개의 인스턴스를 생성할 수 있다.
-
인스턴스를 생성한 후에 사용할 수 있는 필드와 메서드를 인스턴스 멤버라 부른다.
- 인스턴스 멤버는 객체가 생성되면 해당 객체의 상태와 동작을 나타낸다.
-
인스턴스 메서드 내에서 자기 자신을 호출할 때
this참조 변수를 사용한다.- 변수(Variables)와 상수(Constant) 참고.
- 클래스 메서드에서는 인스턴스 변수를 사용할 수 없기 때문에 this 참조 변수를 사용할 수 없다.
- 메서드(Methods)#종류 참고.
-
여기서의 변수이름이 인스턴스,
클래스()는 생성자
ClassName instanceName = new ClassName();
// this.field 라고 쓰면 instanceName.field가 된다. 즉 자기 자신을 참조한다.
- C++의 ROOT package 작업 시엔 이런 걸 많이 사용했었다
TFile* file = new TFile("파일이름", "옵션");
// TFile : 클래스 이름
// file : 인스턴스(TFile 클래스의 객체화)