Java 클래스
학습 주제
- 클래스 정의하는 방법
- 객체 만드는 방법 (new 키워드 이해하기)
- 메소드 정의하는 방법
- 생성자 정의하는 방법
- this 키워드 이해하기
클래스, 객체, 인스턴스
클래스란
- 객체를 정의해놓은 것
- 객체의 설계도, 틀
- 클래스는 객체를 생성하는데 사용
객체란
- 사전적 정의는 실제로 존재하는 것
- 클래스에 정의된 내용대로 메모리에 생성된 것
- 객체는 인스턴스를 대표하는 포괄적인 의미
인스턴스
- 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 한다.
- 클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화라고 한다.
- 인스턴스는 어떤 클래스로 만들어진 것인지 강조하는 구체적인 의미
예를 들면, Tv클래스로부터 만들어진 객체를 Tv클래스의 인스턴스라고 한다.
클래스 정의하는 방법
객체는 속성과 기능의 집합이다.
- 속성property : 멤버변수, 특성(attribute), 필드, 상태
- 기능function : 메서드, 함수, 행위
클래스 구성요소
- 필드(field) : 필드는 객체의 상태 속성을 나타내며 멤버 변수라고도 한다. 여기서 초기화하는 것을 필드 초기화 또는 명시적 초기화라고 한다.
- 인스턴스 변수 : 인스턴스가 갖는 변수로 인스턴스 생성시 만들어진다. 요청마다 독립적인 값을 갖아 heap 영역에 할당되고 gc에 의해 관리된다.
- 클래스 변수 : static키워드가 멤버변수 앞에 붙으면 클래스 변수이다. 해당 클래스의 모든 인스턴스는 클래스 변수를 공유한다. 그렇기 때문에 heap 영역이 아닌 static 영역에 할당되고 gc의 관리를 받지 않는다.
- 메서드 : 메서드는 객체의 행동을 나타낸다.
- 인스턴스 메서드 : 인스턴스 변수와 연관된 작업을 하는 메서드이다. 인스턴스를 통해 호출할 수 있으므로 먼저 인스턴스를 생성해야 한다.
- 클래스 메서드 : 정적 메서드라고도 한다. 일반적으로 인스턴스와 관계없는 메서드를 클래스 메서드로 정의한다.
- 생성자(constructor) : 생성자는 객체가 생성된 직후에 클래스의 객체를 초기화하는 데 사용되는 코드 블록이다. 메서드와 달리 리턴 타입이 없으며 클래스엔 최소 한 개 이상의 생성자가 존재한다.
- 초기화 블록(initializer) : 초기화 블록 내에서는 조건문, 반복문을 사용해 초기화를 수행할 수 있다.
- 클래스 초기화 블록 : 클래스 변수 초기화는 기본값 → 명시적 초기화 → 클래스 초기화 블록 순으로 진행
- 인스턴스 초기화 블록 : 인스턴스 변수 초기화는 기본값 → 명시적 초기화 → 인스턴스 초기화 블록 → 생성자 순으로 진행
클래스 정의
class Class { // 클래스
static String classVariable; // 클래스 변수
String instanceVariable; // 인스턴스 변수
String instanceVariable2; // 인스턴스 변수
static { // 클래스 초기화 블록
classVariable = "Class Variable";
}
{ // 인스턴스 초기화 블록
instanceVariable = "Instance Variable";
}
Class() { // 생성자
instanceVariable2 = "instanceVariable2";
}
static void classMethod() { // 클래스 메서드
System.out.println(classVariable);
}
void instanceMethod() { // 인스턴스 메서드
System.out.println(instanceVariable);
}
}
클래스 제어자
- 접근제어자 : 클래스는 public과 default만 사용할 수 있다.
- 일반 제어자
- final: 클래스 앞에 붙으면 해당 클래스는 상속될 수 없다.
- abstract :클래스 앞에 붙으면 추상 클래스가 되어 객체 생성이 불가하고, 접근을 위해선 상속받아야 한다.
- transient : 객체를 직렬화할 때 해당 내용은 무시된다.
- synchronized : 메서드는 한 번에 하나의 쓰레드에 의해서만 접근 가능하다.
- volatile : 해당 변수의 조작에 CPU 캐시가 쓰이지 않고 항상 메인 메모리로부터 읽힌다.
객체 만드는 방법 (new 키워드 이해하기)
연산자 new에 의해 인스턴스가 heap에 생성된다. 이때 멤버변수는 자료형의 기본값으로 초기화된다.
this 키워드 이해하기
this키워드는 인스턴스 자신을 가르킨다.
this()는 해당 클래스 생성자를 호출할 수 있다. 그러므로 생성자를 재사용할 때 쓰여 생성자 체이닝을 할 수 있다.
생성자 체이닝
생성자 체인은 this 또는 super 키워드를 사용해서 생성자에서 다른 생성자를 호출하는 것으로 생성자의 이름을 직접 호출할 수 없으므로 this와 super 키워드를 사용한다.
참고자료
'Java관련 > Java' 카테고리의 다른 글
Java 애너테이션 (0) | 2022.11.23 |
---|---|
Java enum (0) | 2022.11.04 |
Java 예외 처리 (0) | 2022.09.29 |
Java static, static final, final 차이 (0) | 2022.09.15 |
자바 상속의 메모리 할당 과정 (0) | 2022.09.05 |
댓글