[Section 1] Java 객체지향 프로그래밍 심화(2)

현이·2023년 3월 1일
0

백엔드 부트캠프 TIL

목록 보기
11/37
post-thumbnail

사진은 오페라 가르니에 - 나폴레옹이 궁전에서도 건물을 보기를 원해서 루브르와 일직선 도로로 연결되어있다

사실 인터페이스는 자바에서 제일 힘들어하는 개념 중 하나였는데 인터페이스가 어떤 기능과 역할로 다형성을 수행하는지 알면서 다시 보니 훨씬 수월했다. 그래도 직접 해보는거랑은 다른 느낌이라 연습이 필요할 듯 하다.




다형성(Polymorphism)

  • 한 타입의 참조 변수를 통해 여러 타입의 객체를 참조할 수 있는 것
  • 상위 클래스 타입의 참조 변수로 하위 클래스 타입 객체 참조

참조변수의 타입 변환

  • 사용할 수 있는 멤버의 개수를 조절하는 것
    참조 변수의 형변환은 상속 관계에서 쌍방향으로 모두 허용된다.

타입 변환 조건
1. 상속 관계에서만 가능
2. 업캐스팅(하위 클래스 -> 상위 클래스)은 형변환 연산자 생략 가능
3. 다운 캐스팅(상위 클래스 -> 하위 클래스)은 형변환 연산자 명시해야됨
➕ 이미 업캐스팅 되어있다는 전제하에만 다운캐스팅 가능!


instanceof 연산자

  • 캐스팅 가능여부를 boolean으로 리턴
  • 참조변수가 null이면 false 리턴



추상화(Abstraction)

  • 상속과 반대로 클래스들의 공통점 뽑아서 상위 클래스 만드는
  • 객체의 공통적인 속성과 기능을 추출하여 정의하는 것
  • 구현 방법 : 추상 클래스 & 인터페이스

abstract 제어자

  • "미완성" (인터페이스도)
  • abstract 키워드로 추상 메서드, 추상 클래스 만듦
  • 추상 메서드 포함하면 클래스도 자동 추상 클래스!
  • 뼈대만 만든거라 설계도라 생각하면 됨 => 객체 생성 불가!!!

추상 클래스

  • 추상 클래스 만든 후 상속받은 하위 클래스들 오버라이딩 하면 상황에 맞는 메서드 유연하게 구현 가능
  • 시그니처만 있고 바디가 없음!
    => 상속 계층도 위로 갈수록 추상화의 정도 높음(공통적인 속성과 기능 갖고 있음)

final 키워드

final 키워드 위치별 역할
1. 클래스: 변경, 확장, 상속 불가능
2. 메서드: 오버라이딩 불가능
3. 변수: 값 변경 불가능

=> final 붙으면 더이상 확장 안되거나 변경 안됨


인터페이스

  • 추상 메서드의 집합
  • 선언과 구현 분리

🫧추상화 정도가 아래로 갈수록 높다🫧
일반 클래스
추상 클래스 (일반 클래스에서 추상 메서드 하나라도 포함)
인터페이스 (상수와 추상메서드만 멤버로 가짐)

  • implements 키워드로 구현

  • 상수는 반드시 public static final

  • 메서드는 반드시 public abstract

  • 다중 구현 가능

  • 인터페이스는 인터페이스로부터만 상속 가능

  • 클래스는 다른 클래스로부터 상속받으면서 인터페이스 구현 가능

0개의 댓글