클래스
- 명명법 : 파스칼 케이스
- 클래스(Class)는 서로 관련있는 멤버(Member)를 묶어내기 위해 존재하는 참조 타입(Reference Type)인 객체 단위이다.
- 자바 파일(.java)은 반드시 접근 제한자가 `public`인 파일 이름과 같은 이름을 가지는 구성 요소를 요구한다.
- 멤버(Member) : 어떠한 클래스가 가질 수 있는 구성요소 전체를 아울러 의미한다. 가령, 멤버 변수나 메서드 등이 멤버에 해당한다.
- 구조
> [접근 제한자] [abstract|final]? class [클래스 이름] [extends [상속할 클래스 이름]]? [implements [구현할 인터페이스 이름,...]]? {
> }
> - [접근 제한자] : 해당 클래스에 접근할 수 있는 대상을 제한한다.
> - `abstract` : 해당 클래스가 추상적이게 된다. 추상 클래스는 최종적일 수 없다.
> - `final` : 해당 클래스가 최정적이게 된다. 더 이상 해당 클래스를 상속 받을 수 없다는 뜻이며, 최종 클래스는 추상적일 수 없다.
> - `extends` : 상속 받을 클래스를 지정한다. 생략시 `Object`클래스를 상속 받는다. 자세한 것은 해당 문서 '상속' 부분 참고.
> - `implements` : 구현할 인터페이스를 한 개 이상 지정한다. 생략시 구현하는 인터페이스가 없다. 자세한 것은 '인터페이스' 문서 참고.
> ```java
> public class Main {
> }
- 위 `Main` 클래스의 접근 제한자는 `public`이다.
- 위 `Main` 클래스는 추상적이지 않다. (`abstract`가 아님)
- 위 `Main` 클래스는 최종이지 않다. (`final`이 아님)
- 위 `Main` 클래스의 이름은 당연히 'Main'이다.
- 위 `Main` 클래스는 `Object` 클래스를 상속 받는다.
- 위 `Main` 클래스는 구현하는 인터페이스가 없다.
- 클래스가 추상적이라고 하더라도 반드시 추상 메서드를 가져야 하는 것은 아니다.
- 추상 클래스는 일반적인 방식으로 객체화 할 수 없다.
생성자
- 생성자(Constructor)는 어떤 참조 타입이 객체화 되기 위해 반드시 한 번 실행되어야 하는 일종의 메서드이다. 단, 일반 메서드와 달리 반환 타입이나 별도의 이름이 없다.
- 생성자 호출이 완료되기 전 까지는 해당 객체가 완전히 객체화되었다고 할 수는 없다.
- 생성자 내의 첫 구문은 반드시 '자기 생성자 호출'(`this(...)`) 혹은 '부모 생성자 호출'(`super(...)`) 둘 중 하나여야 하며, 이가 아니거나, 둘 다 일수는 없다.
- 구조
> ```java
> [접근 제한자] [클래스 이름]([매개 변수,...]?) {
> }
> ```
- 클래스 내에 생성자를 별도로 만들지 않는다면 항상 **기본 생성자**(_Default Constructor_)가 있는 것이다. 기본 생성자는 아래와 같다.
> public [클래스 이름]() {
> super();
> }
상속
- 상속(Inheritance)는 클래스간에 1:1로 이루어지며, `extends` 키워드를 이용하여 어떠한 클래스를 상속 받을지 설정할 수 있다.
- 상속은 주로, 부모(Parent)가 되는 클래스의 기능(멤버)을 추가하고자 할 때 사용한다.
- 상속은 상하 관계로 평가된다.
- 상속을 명시하지 않으면 `Object` 클래스를 상속 받는다. (`extends Object` 생략됨)
- 모든 참조 타입은 결과적으로 `Object` 클래스를 상속 받는 것으로 귀결된다.
- 다중 상속 및 순환 상속은 불가하다.
'Java' 카테고리의 다른 글
[Java] 일반 문법(반복문) (0) | 2023.02.08 |
---|---|
[Java] 연산자와 순위 (0) | 2023.02.08 |
[Java] 타입(Type) 그리고 변수와 상수 (0) | 2023.02.07 |
[Java] Java 기본 개념 (0) | 2023.02.07 |
[Java] 공통 (0) | 2023.01.31 |