클래스
- 클래스 정의하는 방법
- 객체 만드는 방법 (new 키워드 이해하기)
- 메소드 정의하는 방법
- 생성자 정의하는 방법
- this 키워드 이해하기
상속
- 자바 상속의 특징
- super 키워드
- 메소드 오버라이딩
- 다이나믹 메소드 디스패치 (Dynamic Method Dispatch)
- 추상 클래스
- final 키워드
- Object 클래스
과제
- int 값을 가지고 있는 이진 트리를 나타내는 Node 라는 클래스를 정의하세요.
- int value, Node left, right를 가지고 있어야 합니다.
- BinrayTree라는 클래스를 정의하고 주어진 노드를 기준으로 출력하는 bfs(Node node)와 dfs(Node node) 메소드를 구현하세요.
- DFS는 왼쪽, 루트, 오른쪽 순으로 순회하세요
클래스
클래스 정의하는 방법
-
필드(field) - 필드는 해당 클래스 객체의 상태 속성을 나타내며, 멤버 변수라고도 불린다. 여기서 초기화하는 것을 필드 초기화 또는 명시적 초기화라고 한다.
- 인스턴스 변수 - 인스턴스는 메모리에 할당된 객체를 의미하며, 인스턴스 변수는 인스턴스가 갖는 변수이다. 그렇기에 인스턴스를 생성할 때 만들어진다. 서로 독립적인 값을 갖으므로 heap 영역에 할당되고 gc에 의해 관리된다.
- 클래스 변수 - 정적을 의미하는 static키워드가 인스턴스 변수 앞에 붙으면 클래스 변수이다. 해당 클래스에서 파생된 모든 인스턴스는 이 변수를 공유한다. 그렇기 때문에 heap 영역이 아닌 static 영역에 할당되고 gc의 관리를 받지 않는다. 또한 public 키워드까지 앞에 붙이면 전역 변수라 볼 수 있다.
-
메서드(method) - 메서드는 해당 객체의 행동을 나타내며, 보통 필드의 값을 조정하는데 쓰인다.
- 인스턴스 메서드 - 인스턴스 변수와 연관된 작업을 하는 메서드이다. 인스턴스를 통해 호출할 수 있으므로 반드시 먼저 인스턴스를 생성해야 한다.
- 클래스 메서드 - 정적 메서드라고도 한다. 일반적으로 인스턴스와 관계없는 메서드를 클래스 메서드로 정의한다.
-
생성자(constructor) - 생성자는 객체가 생성된 직후에 클래스의 객체를 초기화하는 데 사용되는 코드 블록이다. 메서드와 달리 리턴 타입이 없으며, 클래스엔 최소 한 개 이상의 생성자가 존재한다.
-
초기화 블록(initializer) - 초기화 블록 내에서는 조건문, 반복문 등을 사용해 명시적 초기화에선 불가능한 초기화를 수행할 수 있다.
-
클래스 초기화 블록 - 클래스 변수 초기화에 쓰인다.
-
인스턴스 초기화 블록 - 인스턴스 변수 초기화에 쓰인다.
클래스 변수 초기화: 기본값 → 명시적 초기화 → 클래스 초기화 블록
인스턴스 변수 초기화: 기본값 → 명시적 초기화 → 인스턴스 초기화 블록 → 생성자
-
-> 클래스는 class라는 키워드로 정의되며 각각 변수(속성)와 메서드(행위)를 가지게 된다.
객체 만드는 법(new 키워드 이해하기)
new연산자는 클래스 타입의 인스턴스를 생성해주는 역할을 하는 연산자로 메모리(Heap 영역)에 공간을 할당받고 그 공간의 참조값을 객체에게 반환해주는 역할을 한다.
new 키워드는 새 객체에 메모리를 할당하고 해당 메모리에 대한 참조값을 반환하여 클래스를 인스턴스화한다.
일반적으로 객체가 메모리에 할당되면 인스턴스라 부른다.
메소드 정의하는 방법
위에 사진에 Person이 메소드이다. 메소드는 일반 함수를 정의하는 방법과 크게 다르지 않다.
접근제어자 반환타입 메소드이름(매개변수목록) { // 선언부
// 구현부
}
생성자 정의하는 방법
클래스를 가지고 객체를 생성하면, 해당 객체는 메모리에 즉시 생성된다.
이렇게 생성된 객체는 모든 인스턴스 변수가 아직 초기화되지 않은 상태로 원하는 값으로 초기화하기 위해 생성자라는 메소드가 존재한다.
- 생성자
- 생성자는 반환값이 없지만, 반환 타입을 void형으로 선언하지 않는다.
- 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 생성한다.
- 기본 생성자가 아닌 다른 생성자만 생성했다면 컴파일러는 기본 생성자를 생성하지 않는다. (오류 생길 수 있음)
- 하나의 클래스는 반드시 하나 이상의 생성자를 갖는다.
<생성자 예시도 위 사진에 첨부되어 있음>
this 키워드 이해하기
this 키워드는 인스턴스 자신을 가리킨다. 위 사진의 코드에서 this를 사용함으로써 Person메소드의 age, name 객체와 매개변수 age와 name을 구별할 수 있다.
-> this()는 해당 클래스 생성자를 호출할 수 있다. 때문에 생성자를 재사용하는 데 쓰인다.(생성자 체이닝)
Java 3주차_상속
Java 3주차_트리
'Java' 카테고리의 다른 글
Java 3주차_트리 (0) | 2023.10.15 |
---|---|
Java 3주차_상속 (1) | 2023.10.15 |
Queue (0) | 2023.10.10 |
ListNode를 사용한 Stack (0) | 2023.10.10 |
Stack (0) | 2023.10.10 |