마트철수

[031] JAVA 상속 오버라이딩 본문

KB IT's Your Life/교육

[031] JAVA 상속 오버라이딩

마트스 2024. 6. 20. 18:20

 

2024.06.20(목)
 
JAVA 4일차
 
클래스는 필드, 생성자, 메서드 → #필생메

상속은 메소드 오버라이딩,  다형성, 추상

 

 
Home: 개발환경 - import 설정 구축해두기
 
 


 

ch06 클래스

 
패키지

: 개발 회사의 도메인 이름의 역순으로 만듦

: 이름 충돌 때문에 import문 사용 불가 → 전체 클래스 경로명을 사용

ex) import com.hankook.*;

 

접근 제한자

: 객체의 무결성을 유지하기 위해서

: public > protected > (default) > private

#default는 안붙였을때, 같은 패키지 내에서 public과 같은 역할을 함

 

Getter와 Setter

: 객체의 필드(데이터) 은닉

#외부에서 직접 접근하는 경우 잘못된 데이터 입력 가능(무결성 깨짐)

 

- 필드에 대한 접근은 Getter, Setter 메서드로 접근

- boolean 타입에 대한 Getter 메서드는 isXxxx()가 관례

 

싱글톤 패턴

: 생성자를 private 접근 제한해서 외부에서 new 연산자로 생성자 호출을 막음

[031] JAVA 상속 오버라이딩

 

 

 

ch07 상속

 

상속

: 클래스 재사용하므로 중복 코드 줄임

: 클래스 수정 최소화

 

클래스 상속

: extends 부모클래스

#하나의 부모 클래스만 상속(다중 상속 불가, 언어에 따라 다름)

 

메소드 재정의

 

메소드 오버라이딩은 자식 클래스에서 재정의하는 것

- 리턴 타입, 메소드 이름, 매개변수와 동일해야함

- 부모에서는 따로 존재하는 것

- 접근 제한을 더 강하게 불가(public → private 불가 / private → public 가능)

#오버로딩은 아예 다른 것이기에 구분 잘 해야함 (하나라도 다르면 아예 새로운 메소드가 생성되는것)

 

@Override ... @는 annotation(주석) → 코드 자체에는 영향을 주지 않음

// ... comment(주석)과 다름

Ctrl + O

 

타입 변환 (★매우중요★)

 

자동 타입 변환

: primitive, 작은 번위에서 큰 범위로 (분실이 없음)

 

다형성 (매우 어려움)

: 실행 결과가 다양하게 나오는 성질

: 자동 타입 변환 + 메소드 재정의(오버라이딩)

 

#Upcasting을 기본으로 사용

 

[031] JAVA 상속 오버라이딩

 

- Car은 Tire에 의존한다

- 부모 클래스 아래 여러 자식 클래스가 있음 → 사용하는 곳에서 부모 타입으로 이용(use)한다

→ 해당 구조를 보면, '다형성을 이용하고 있구나' 라고 해석 가능

 

#Class Diagram 해석이 중요함

#결합도는 낮추고(단일책임원칙), 응집도는 높여라

 

주입(Injection) ... DI

 

객체 타입 확인

 

instanceof 연산자

: 매개변수가 아니더라도 변수가 참조하는 객체의 타입을 확인할 때

ex) boolean result = 객체 instanceof 타입; ... 좌항의 객체가 우항의 타입이면 true 산출

 

추상 클래스

 

 

1) 클래스를 강제화시킬때

2) 전략 패턴의 부모 타입으로 사용하기 위해서

 

#SPR(Single Responsibility Principle, 단일책임원칙), OCP(Open/Closed Principle, 개방/폐쇄 원칙)

 

실습

 

[031] JAVA 상속 오버라이딩

 

> 상수는 무조건 대문자로 작성한다.

 

 

[031] JAVA 상속 오버라이딩

 

> static 함수가 가장 먼저 해석됨

> 5번에서 static 삭제할 경우 오류 발생