[항해99] 4주차 WIL - 주특기 이후 첫 주말.

LIHA·2023년 2월 5일
0

항해99

목록 보기
35/54
post-thumbnail

일요일은 '혼자만의 시간을 가지며, 한 주를 회고하는 날' ...

(?)

이번 주의 테마 : 상속, 인터페이스

(친족상속법 생각난다)

상속(inheritance)


이모티콘 - 합쥐 작가님
너의 것도 나의 것, 나의 것도 나의 것.

  • 상속은 기존의 클래스를 이용하여 새로운 클래스를 정의하고, 기존 클래스가 가진 객체(변수+메서드)를 싹 다 물려주는 것.
    왜 쓰나요? -> 적은 코드로 새 클래스를 만들고 관리할 수 있기 때문.

  • 항상 부모 클래스 이상의 멤버를 가진다. 최소 같은 수이고 더 많을 수도 있지만, 더 적을 수는 없다.

  • 클래스의 상속은 extends를 사용하여 표현하는데, 한 개의 부모클래스만 둘 수 있다. 두 개 이상에서 상속 불가함. (부모가 둘일 순 없... 있나? 아무튼)
    -> 이에 관해서는 Diamond problem 이라고 있다.


(상속의 화살표는 원래 이렇게 표현한다. 예상과 약간 다르다. 쟤가 내 부모야, 저기서 상속받아 왔어, 라는 의미로 생각하자.)

D가 B와 C를 모두 상속했다면, 같은 메서드에 대해 다른 출력값이 설정되어 있을 때 과연 D는 B와 C의 메서드 중 어떤걸 수행해야 하는가? 에 대한 문제.

B는 println("hello!") 이고 C는 println("hi!")인 경우, D는 죽여줘를 시전한다.(?)

상속 관계가 반드시 생겨야 하는 경우가 있다 - 추상 클래스와 추상 메서드일 때

abstact가 붙으면 구현부(몸통)가 비어있기 때문에, 반드시 그 클래스나 메서드를 상속 받아서 다른 곳에서 자세히 구현해줘야 한다. 아니면 abstract를 떼고 거기다 body를 넣고 거기서 구현해서 쓰거나.

추상클래스나 메서드를 쓰는 이유는, 예를 들면 동물 class에서 먹다() 라는 메서드를 만들 때, 먹는건 똑같은데 풀인지 고기인지는 다르기 때문에 위에서 미리 정의하기가 곤란하다. (나중에 누가 다 리팩터링 할거야?!)
-> 이런 경우가 상당히 많아서, 큰 틀만 잡고 나머진 상속 받는 위치에서 세부구현 하는것이 좋다.

인터페이스?

인터페이스는 추상 메서드의 묶음을 말하는데, 의외로 인터페이스 자체는 클래스의 일종이다. 그래서 implements로 상속받을 수 있는 것.
JAVA는 diamond problem 때문에 다중상속을 지원하지 않지만, 그럼에도 불구하고 다중상속의 이점을 포기할 수는 없어서 등장하게 된 녀석.

  • 인터페이스의 가장 큰 특징 - 모든 객체가 public이 붙어서 나간다. 특히 변수는 public static final이 기본이라고 생각하면 됨. 내가 안 붙여도 컴파일러가 그렇게 붙여준다.
    왜?-> 얘도 몸통에 제대로된 내용이 없어서 밑에서 끌어다 구현해야 하는데, 전역으로 설정 안해주면 쓸 수가 없다. 얘는 지역변수나 인스턴스 변수를 가질 수 없기 때문.

여담 : E = MC^2의 의미


느낀 점 : 아 역시 나는 머리가 좋진 않구나
근데 다른 분들도 다 비슷하게 생각하시는구나 나만 그런줄 알았는데 그런건 또 아닌가보다
사람 사는게 크게 다르진 않은것 같기도(??)

아쉬운 점 : 예상만큼 공부를 못했는데 체력소모가 너무 빨라 건강에 이상이 벌써 생겼다
여기서 멈추면 안되는데

profile
갑자기 왜 춤춰?

0개의 댓글