0719 자바 Inheritance, Constructor
생성자(Constructor): 클래스명과 이름 동일, 반환타입이 없음.
특징: 클래스 내에서 명시적인 생성자를 만들지 않는다면 디폴트 생성자가 컴파일러에 의해 기본으로 생성된다.
OOP- 2. Inheritance
: 기존 상위 클래스의 자산 (멤버) 를 자식 (예) 클래스에서 재사용하기 위함.
(생성자 & 초기화 블록은 상속 x)
⇒ 코드 절감, 유지보수 위함.
키워드: extends
* Object 클래스: 모든 클래스의 조상 클래스 (최상위 클래스)
별도 extends 선언 없으면 자동으로 extends Object 생략된 것.
→ 모든 클래스엔 Object 클래스에 정의된 메서드가 있음!!
: 자바는 단일상속만 지원한다. (다중상속 ×)
→ 대신 interface 와 포함관계 (has a) 로 다중상속 효과 가능
• 포함관계: 상속 이외에 클래스 재활용하는 방법.
ex) 2개 이상의 클래스 속성 가져오고 싶을때 하나는 상속으로, 나머지는 멤버변수로 처리.
언제 상속, 언제 포함? → 관점에 따라 적절히 결정.
- 메서드 오버라이딩(메서드 재정의): 조상 클래스서 물려받은 메서드를 자식에서 수정
조건: 메서드명이 같이야 함, 매개변수 개수-타입. 순서 같아야, 리턴타입 같아야
(접근제한자가 부모보다 범위 넓거나 같아야함, 조상보다 더 큰 예외 허용X)
* static 메서드는 오버라이딩이 안된다. 정적 메서드는 클래스 레벨로 인스턴스와는 다르게 컴파일 시점에 호출되는
정적 바인딩을 거치는데 상속/다형성에 의해 동적으로 메서드가 선택되는 오버라이딩과는 다른 원리로 동작함.
자식 클래스에서 동일한 이름의 정적 메서드를 선언할수는 있지만 이는 부모 클래스의 정적 메서드를 숨기는 효과가 있을 뿐
오버라이딩이 되는건 아니다.
- 매서드 오버로딩: 이름 동일, 반환타입은 달라도 같아도 ㄱㅊ
but 오버라이딩과는 다르게 매개변수의 개수나 타입이 달라야 한다
ex) 생성자 내에서 생성자를 호출하는 경우: 파라미터에 따라 생성자가 여러개일때 중복되는 코드를 줄일 수 있음
* super. 키워드 통해 조상 클래스 멤버 이용 가능 (코드 중복 방지)
내 멤버: this / 조상 멤버: super
this(), super()은 생성자 내에서만 호출 가능하다는 제약이 따른다.
생성자 내에서 명시적으로 super () 호출 안하면 자동으로 super() 생성됨
super() 도 this.()도 둘다 첫번째 구문으로만 가능함!!
this()와 super()가 같이 호출될수 없는이유: super를 두번이상 호출하는꼴이라서!!
public class MyClass {
public MyClass() {
this(); // OK, 다른 생성자 호출
super(); // 에러! 동시에 사용 불가능
}
}
• Annotation: 컴파일러, JVM, 프레임워크 등을 위한 주석.
소스 코드에 메타데이터를 삽입.
소스에 대한 라벨, 코드 정보 추가 역할.
1) @Deprecated: 잘 안쓴다고 알려줌.
2) @Override. 오버라이딩 확인 받기
• package 申
PC의 많은 파일 관리 → 폴더처럼 이용.
그런 것처럼 클래스들을 관리하기 위함! 모든 클래스들은 반드시 하나의 패키지에 속한다.
일반적인 네이밍 룰: 소속. 프로젝트. 용도 ex) com.ssafy.commons import
다른 패키지에 선언된 클래스 사용할 땐 import ex) import 패키지명, 클래스 명
다 가져올땐 * (하위 패키지까지 import 되는건 x)
import 하는 패키지의 클래스 명이 동일하다면 풀 패키지명 입력.
* static import: 자주 쓰는 클래스 정적 멤버변수 이용할때 이렇게 사용가능
• 제한자 (modifier)
: 클래스, 변수, 메서드 선언부에 함께 사용하며 부가적인 의미부여
접근 제한자 종류: public, protected, default. private
그 외로 Static, final, abstract, synchronized..
한 대상에 여러 제한자 사용가능. but 접근제한자는 아무래도 하나만.
. final: 마지막. 찐막. 더 이상 변경 X
: 언제 쓰냐? 사용자가 임의로 바꿔서 더 좋을 게 없을때. 괜히 바꿨다가 오류만 날 것 같을 때 방지.
→ class, method, 변수에 사용가능.
더이상 확장 X 상속 불가, final class
더이상 재정의 x (오버라이딩 ×) final method
더이상 값변경X (상수) → final variable
- Static final: 클래스 레벨의 상수로, 객체와 무관하게, 모두가 공용하는 값. 클래스가 로드될때 초기화
- blank final: 값 아직 할당 X(초기값 아직 안준상태) 멤버 변수. 한번 초기화되고 값변경 x
주로 생성자를 통해 초기화함으로써 객체생성시에 값 할당하고 이후 변경 불가능하도록 한다.
*오버라이드, 리플렉션 이 두 개념은 중요하다. 스프링에서 자주 나옴