/*
<클래스>
◎ 클래스(Class)는 서로 관련있는 멤버(Member)를 포함하기 위한 존재이다.
◎ 클래스의 명명은 파스칼 케이스를 이용하고, 단수형 명사를 이용한다.
[접근 제한자] [abstract|final]? class [클래스 이름] [extends [부모 클래스 이름]]? [implements [인터페이스 이름,...]]? {
}
public class FIFTH {
}
-위 클래스의 접근 제한자는 public 이고, 추상적이지 않으며 이름은 FIFTH 이다.
별도로 상속(inheritance) 및 구현(implementation) 이 언급되어 있지 않다.
- abstract : 추상 여부.
- final : 최종 여부
- 클래스는 추상적이면서 최종적이거나 최종적이면서 추상적일 수 없다.
(abstract,final 중 하나만 쓰라는 뜻, 아님 아예 안쓰거나.)
- 추상클래스
→ abstract 키워드를 이용하여 어떠한 클래스를 추상적으로 만들 수 있다.
→ 추상적인 클래스는 일반적인 방식으로 직접 객체화할 수 없다.
→ 추상 메서드가 없다 하더라도 클래슨는 추상적일 수 있다.
◎ 접근 제한자가 public 인 클래스는 그 클래스 코드를 포함하는 파일의 실제 이름과 동일해야 한다.
◎ 클래스가 내부에 포함하고 있을 수 있는 대상은 많지만 '멤버 변수(Member Variable) 와 메서드(Method)' 가 주류를 이룬다.
<객체화(Instantiation>
◎ 어떠한 타입(주로 클래스)에 대한 독립적인 객체(값)를 생성하기 위해 사용한다.
◎ 클래스 객체화 시 클래스가 멤버로 가지고 있는 비정적인(정적이지 않은) 모든 것이 새롭게 생기게(초기화 혹은 객체화) 된다.
[타입] [변수이름] = new [타입] [생성자 호출부];
T t = new T(); //T : 타입
<생성자(Constructor)>
◎ 생성자(Constructor)는 어떠한 클래스를 객체화할 때 반드시 한 번 실행이 되는 일종의 메서드이다.
단, 생성자는 임의로 호출할 수는 없다.
◎ 어떠한 클래스 내에 그 어떤 생성자도 명시하지 않은 경우 기본생성자가 있는 것으로 간주한다.
기본 생성자는 매개변수가 없고, 호출 부의 구문은 부모 생성자 호출 하나로 이루어져있다.
public [클래스 이름](){
super();
}
◎ 생성자는 정적일 수 없고,생성자는 반환 타입이 없으며(선택 사항이 아님으로 void 로 명시하지도 않는다.)
구현부의 첫 구문은 반드시 부모 혹은 본인 생성자 호출이어야만 한다.
<캡슐화(Encapsulation)>
◎ 캡슐화(Encapsulation)는 어떤 클래스가 가지는 멤버 변수의 접근 제한자를(상수가 아닌한) private 으로 막고,
이에 접근하기 위한 Getter 및 Setter 메서드를 만드는 것을 의미한다.
◎ 멤버 변수에 직접 값을 대입할때에는 특정 로직을 실행시킬 수 없으나, Setter 메서드를 통해 값 대입을 대리하게
하면 특정 로직을 실행 시킬 수 있음으로 올바르지 않은 값의 대입을 막을 수 있다.
◎ 즉, 개발자간의 협동의 용이 및 실수의 방지를 위해 대부분의 필드를 가지는
클래스(Entity,DTO,VO 등)는 캡술화가 되어 있다.
◎ 읽기전용(상수,final)의 경우 캡슐화를 하기도 하지만 안 해도 상관 없다.(어차피 값 대입이 안되니)
단, 값이 참조될때 마다 특정 로직을 작성해야 한다면 읽기 전용이라 하더라도 Getter 메서드를 만드는 경우가 있다.
◎ 정적인 읽지전용(static final)의 경우 캡슐화를 하지 않는다.(하면 안된다.)
<상속(Inheritance)>
◎ 기존에 존재하는 최종적이지 않은(final 이 아닌) 클래스의 기능을 그대로 가지고 추가적인 기능을 구현하기
위해 클래스를 상속받을수 있다.
◎ 상속 받을 수 있는 클래스의 개수는 한 개로 제한된다.
◎ 클래스 간의 상속 구조가 순환 상속 구조(Circular Inheritance)가 되어서는 안된다.
public class Child extends Parent{
//...
}
위 구조에서 클래스 Child 는 클래스 Parent 를 상속 받는다고 한다.
◎ 별도의 상속 대상을 명시하지 않는다면 Object 클래스를 상속받게 된다.
*/