-
[JAVA]_6일차_05.04프로그래밍/Java 2021. 5. 5. 08:37
Important
나의 Vision & Mission 은?
- Vision:
- Mission:
What I don't know
- 객체 vs 상속의 정확한 차이 이해 필요
- 객체 , 상속 질문
Q. 인터페이스는 다중으로 implements 될 수 있는데 이러면 또한 다중 상속을 하지 않는 이유 中 하나인 death diamond 문제에 빠지지 않는가?
Vision
- Your vision of a future situation or society is what imagine or hope it would be like, if things were very different from the way they are now.
- 나, 가족, 공동체, 국가, 인류 - 상상하고 희망하는 것
Mission (사명)
- If you say that you have a mission, you mean that you have a strong commitment(헌신) and sense of duty(의무감) to do or achieve(해내다) something.
프로그래밍 실력
- 라이브러리를 많이 아는 것 → 실력
- API문서 + 구글 계속 살펴보기 (읽고 해보고 읽고 해보고 반복)
클래스 계층 구조
(중요) 메소드에 접근하는 과정
다형성의 이점
- 상위 타입의 참조 변수로 하위 타입의 모든 객체를 받을 수 있다(제어)
웬만하면 사진처럼 상위 타입의 참조변수 - 하위 타입 으로 만드는게 좋다고 한다
상속의 기본적인 원칙
- 웬만하면 자식 클래스에서 새로운 메소드를 추가하지 말아야 한다 (다형성의 위배, 고쳐야 할게 많아짐→버그와 직결)
상속
- java에서는 super class는 한개만! (다중 상속 불가능)
- sub class는 여러개 가능! (Animal — Dog, Hippo, Rion.....)
is-a 관계(물려받는 관계(extends))
has-a 관계(훨씬 많음, 이용하는 관계)
- is-a 관계
- 늑대 is a 동물 (동물 is a 늑대 X) : 반대로는 불가능
상위 클래스의 private 변수는 상속이 가능한가?
- ex) Animal - Dog 상속관계
- 접근이 불가능하다, 다만 public로 지정한 getter, setter함수를 이용하면 접근이 가능하다
- Head First Java_217p에서는 상속되지 않는다고 설명되어 있다
★★★ 상속의 이점 (pdf 203p-206p)
- 코드 중복 방지 (상위 클래스 멤버 사용가능하기 때문)
- ★★★★ Inheritance provides a powerful and natural mechanism for organizing and structuring your software. (You define a common protocol for a group of classes)
- 상위 타입의 참조 변수로 하위 타입의 모든 객체를 받을 수 있다 (ex. Animal an = new Dog();)
??????
다형성이 성립되지 않는다면
- 다형성이 성립되지 않는다면 giveShot() 를 타입에 맞게 여러개 만들어야 한다 (Animal a → Dog a, Cat a, Lion a........)
- → 변화에 유연하게 대응할 수 없게됨
Overriding ↔ Overloading (의미는 전혀 다르다)
- 부모 관계의 메소드는 Overriding ↔ 형제 관계의 메소드는 Overloading
- Overriding:
- 상속 관계일 때, 부모로부터 물려받은 메소드를 재사용하는 것
- 인스턴스 변수는 오버라이드 대상이 아니다. 오버라이드가 필요하지 않다.
- Argument는 같아야 한다.
- 즉, 서브 클래스에서 매개변수가 다르게 선언된 메소드는 Override가 아니다 ! (새롭게 선언하는 메소드이다)
- Overloading:
- 이름이 같은 함수를 여러개 사용하는 것(매개변수 형태(개수, 타입)에 따라 구분된다)
Interface (100% 추상 클래스)
- 인스터스를 만들 수 없는 클래스
- 자바에서 필수불가결한 부분(정말 중요)
추상클래스
Animal a = new Animal(); 여기서 Animal() 객체는 Dog? Cat?
- 따라서, 상위 클래스(Animal, Feline, Canine)에 new를 할 수 없게 만드는 abstract를 붙여야 한다(추상 클래스로 만들어야 한다).
추상메소드
- 메소드 실행 내용이 없는 메소드 = ****추상 메소드
- 추상 메소드를 담고 있는 클래스는 무조건 추상 클래스여야 한다(abstract를 붙여야 한다).
- 상위 클래스에 추상 메소드가 있을 경우, 하위 클래스는 해당 메소드를 반드시 Override해야 한다. (+ 하위 클래스를 추상 클래스로 만들면 Override 안해도 됨)
Object 클래스內
- 객체에 대한 내용을 String으로 반환하는 메소드 목록
- equals(Object o)
- getClass()
- hashCode()
- toString()
★★★★★247p
- 컴파일러는 레퍼런스 변수의 타입을 보고 어떤 메소드를 이용할 수 있는지 없는지 판단하지, 실제 연결되어 있는 객체의 타입을 판단하지는 않는다. ← 중요 !!!
- aDog 변수를 선언할 때 지정한 타입(Dog)을 보고 판단을 하지, 실제 객체(new Dog())의 타입을 보고 판단하지 않는다.
인터페이스 사용하는 이유
- 상속의 단점: 필요하지 않은 것까지 상속받게 된다 ex) Animal - Lion (Dog()에만 필요한 adorable()까지 상속받게 된다)
반론
- → 근데 dog() 에만 메소드를 추가하면 되지 않은가?? → 가장 최악의 방식 → 그렇게 하는 순간 다형성을 사용할 수 없다
- dog() 메소드에만 특별한 메소드가 있다는 것을 알고 있어야 한다
- 변경할 일이 생기면, 변화로 인한 복잡성이 증가한다
- 다중 상속! → 실제로 c++ 에서는 다중 상속을 허용하고 있다. → 하지만 diamond problem이 발생한다 (ex. 두 상위 클래스에 각각 존재하는 같은 이름의 메소드를 상속받게 된다면?)
- → 이를 해결하기 위한 방법은 아주 복잡하다.
- 다음과 같은 상속의 한계 → 인터페이스를 사용한다
super 키워드
- super.xxx : 상위 클래스에 접근 가능
Object 최상위 클래스
- java.lang 패키지 안에 있는 Object 최상위 클래스
'프로그래밍 > Java' 카테고리의 다른 글
[JAVA]_8일차_05.06 (0) 2021.05.07 [JAVA]_7일차_05.05 (0) 2021.05.05 [이것이 자바다] 4장 확인문제 (0) 2021.04.29 "Java의 정석" - "이것이 자바다" 목차 (0) 2021.04.28 21.04.27 / 혁신성장_인공지능 개발자 과정_2일차 (0) 2021.04.28