2022.11.08.TUE

ronglong·2022년 11월 8일
0

코드스테이츠 Day14

<객체 지향 프로그래밍 심화>

  1. 다형성(Polymorphism)
  • 상속 관계에서, 상위 클래스 타입의 참조변수로 하위 클래스의 객체를 참조할 수 있는 성질 (멤버 개수 차이 때문에 역은 성립x - 사용 가능한 멤버 수가 줄어드는 건 되어도, 늘어나는 건 불가능)
  • 상속 관계에서, 참조 변수의 타입 변화는 양방향(상위-하위)으로 가능하나, 상위 클래스에서 하위 클래스로 변환하는 다운캐스팅의 경우, 객체 앞에 형변환 연산자 (하위클래스명) 를 써줘야함.
  • 참조변수 instanceof 연산자 클래스명 : 참조변수가 참조하고 있는 인스턴스의 타입 확인. 다운캐스팅, 그러니까 하위 클래스는 false로 나옴.
  • 다형성 관련 링크
    http://www.tcpschool.com/java/java_polymorphism_concept
    https://www.tutorialspoint.com/java/java_polymorphism.htm
    두 번째 링크에서, 다형성 쓰면 컴파일 타임에는 상위 클래스를 확인하고, run 타임에는 하위 클래스를 확인하여 읽는 위치가 다르다는 원리가 적혀있다. 참고만.
  1. 추상화(Abstraction)
  • 공통 요소를 모아 상위 클래스를 만드는 것. 공통 요소 집합화.
  • abstract 기타 제어자 이용. 추상 클래스 = 추상 메서드가 하나 이상 들어있는 클래스
  • 추상 메서드는 메서드 바디가 없다. 시그니처만 있음
  • 즉, 추상 클래스는 미완성의 클래스이므로, 객체 생성이 불가능. 자식 클래스로 객체를 생성할 수 있다.
  • 추상 메서드는 메서드 오버라이딩을 통해 자식 클래스에서 이용되며, 이를 통해 하위 클래스의 상황에 맞는 메서드 구현 가능.
  • 메서드 오버라이딩 != 메서드 오버로딩
  1. 인터페이스(Interface)
  • final : 변경 및 확장이 불가능하다는 키워드(형용사, 기타 제어자)
  • interface : 추상 메서드, 상수, static/default 메서드만 멤버로 가짐. 따라서, 추상 클래스보다 더 높은 추상도.
  • public static final 상수, public abstract 메서드 : 일부 및 전부 생략 가능
  • implements로 구현. 클래스 상속과 달리, 다중 구현 가능(하위 클래스와 충돌할 변수 멤버가 없기 때문에).
  • 인터페이스 내의 추상 메서드는 반드시 하위 클래스에서 메서드 오버라이딩 되어야 함(강제)
  • 코드의 추상화할수록(공통 요소를 모아놓을수록), 나중에 코드 유지/보수가 쉽다. 구체화할수록 하나하나 손대야 하지만, 공통 요소를 묶어 놓으면 메인에는 손 안 대도 되니까. (역할/선언구현 분리)
  1. 기타 정리한 것들
  • 예제 공부 중에, toString 구문을 넣지 않으면 원하는 문자열이 나오지 않고 메모리 주소값이 함께 출력되는 것을 확인했다. 그래서 toString 재정의 관련 내용을 찾아봄.
    https://hudi.blog/java-correct-purpose-of-tostring/
  • 오후 줌 미팅 보니까, println 말고 printf 도 많이 사용하더라.
    https://keep-cool.tistory.com/15
  • 메서드 추출을 통해 리팩토링을 한다. ---> 코드를 정리하여 가독성을 높인다.
  • 의존성 주입(DI) : 메인 코드를 깔끔하게 만들기위해, 따로 외부에서 변수를 결정하고 주입하는 것을 줌 미팅에서 보았다. 이게 Java 개발에서 엄청 중요하다고 함.
    https://tecoble.techcourse.co.kr/post/2021-04-27-dependency-injection/

<느낀 점>
공부할 때는 몰랐는데, 정리하니까 오늘 양 많았군...
점점 기타 정리하는 것들, 즉 추가로 공부하는 것들이 불어나고 있다.

보면 이해는 가지만, 스스로 처음부터 설계를 하고 짜라고 하면 엄두가 안 남...
처음이라 그런 거겠지..? 내일은 실습 과제인데 과연 어떨지..

줌 미팅 때 코드 짜는 거 보면서, 핵심 코드를 지키기위해(즉, 변화 요소가 나타나더라도 핵심 코드를 최대한 수정 사항이 없도록, 건드리지 않기 위해) 주변에 수많은 추상 클래스와 인터페이스가 늘어난다는 느낌을 받았다.

약간 왕을 지키기 위한 신하들의 느낌..?
신하가 너무 많아져서 관리하기 빡세겠다는 생각을 함.
그래도 구체화때문에 노가다하는 것보다는 낫겠지만..

저녁에 운동(복싱) 다녀오면 4시간 정도가 사라져서(나갈 준비, 이동 시간, 운동 시간, 샤워 시간, 저녁 거른 대신 간단한 야식 먹기), 밤에 블로깅하고 나면 11시가 넘는다. 공부 한 30분만 더 하고 내일을 위해 자야겠다.

0개의 댓글