[Java] 클래스(Class)

클래스


- 명명법 : 파스칼 케이스
- 클래스(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` 클래스를 상속 받는 것으로 귀결된다.
- 다중 상속 및 순환 상속은 불가하다.

'Back > 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