2023/10/12

Seunghee Ryu·2023년 10월 12일
0

TIL

목록 보기
10/15

다형성

다형성이란?

  • 여러가지 형태를 가질 수 있는 능력
  • 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현함
  • 상속 관계에 있는 클래스의 경우, 조상 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조하도록 하는 것도 가능함
  • 참조 변수의 타입에 따라 사용할 수 있는 멤버의 개수가 달라진다
    - 인스턴스의 멤버 개수보다 같거나 적어야 한다

참조변수의 형변환

  • 자손 타입의 참조변수를 조상 타입 참조변수로, 조상 타입의 참조변수를 자손 타입의 참조변수로의 형변환만 가능
  • 자손타입 -> 조상타입 : 형변환 생략가능 (업캐스팅) / 조상은 자손보다 멤버의 개수가 적은 것이 분명하기 때문에 생략 가능
  • 자손타입 <- 조상타입 : 형변환 생략불가 (다운캐스팅)
  • 참조 변수의 타입을 변환하는 것이지 인스턴스를 변환하는 것은 아니기 때문에 참조변수의 형변환은 인스턴스에 아무런 영향을 미치지 않는다
  • 참조변수의 형변환을 통해서 참조하고 있는 인스턴스에서 사용할 수 있는 멤버의 범위를 조절하는 것 뿐이다
  • 조상 타입의 인스턴스를 자손 타입의 참조변수로 참조하는 것은 허용되지 않는다

instanceof 연산자

  • 참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 사용하는 연산자
  • 조건문에 사용, instanceof의 왼쪽에는 참조변수를, 오른쪽에는 타입이 피연산자로 위치한다

참조변수와 인스턴스의 연결

  • 멤버변수의 경우 참조변수의 타입에 따라 달라진다

매개변수의 다형성

  • 매개변수에도 다형성을 적용할 수 있다

추상 클래스

추상 클래스란?

  • 미완성 메서드를 포함하는 클래스
  • 인스턴스를 생성할 수 없다
  • 상속을 통해 자손 클래스에 의해서만 완성될 수 있다
  • 새로운 클래스를 작성하는 바탕이 되는 조상 클래스로서 의미를 가진다
  • abstract

추상 메서드

  • 선언부만 작성하고 구현부는 작성하지 않은채로 남겨둔 것
  • 추상클래스로부터 상속받는 자손 클래스는 오버라이딩을 통해 추상 클래스의 추상 메서드를 모두 구현해야 한다

추상 클래스의 작성

  • 추상화 : 클래스 간의 공통점을 찾아내서 공통의 조상을 만드는 작업
  • 구체화 : 상속을 통해 클래스를 구현, 확장하는 작업

인터페이스

인터페이스란?

  • 일종의 추상 클래스
  • 추상메서드와 상수만을 멤버로 가진다

인터페이스 작성

  • 모든 멤버 변수는 public static final이어야 하며, 이를 생략할 수 있다
  • 모든 메서드는 public abstrac 이어야 하며 이를 생략할 수 있다
  • jdk 1.8부터 디폴트메서드 추가 허용

인터페이스 상속

  • 인터페이스는 다중 상속이 가능하다
  • 인터페이스는 최고 조상이 없다

인터페이스 구현

  • implements
  • 일부만 구현해야 하는 경우 abstract를 붙여 추상 클래스로 선언
  • 그 이후 상속과 구현을 동시에 함

인터페이스를 이용한 다형성

  • 인터페이스 ㅌ아ㅣㅂ의 참조변수로 이를 구현한 클래스의 인스턴스를 참조할 수 있으며, 인터페이스 타입으로 형변환도 가능하다
  • 리턴 타입이 인터페이스라는 것은 메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것을 의미한다

인터페이스의 장점

  • 개발시간 단축
  • 표준화 가능
  • 서로 관계없는 클래스들에게 관계를 맺어줄 수 있다
  • 독립적인 프로그래밍 가능

디폴트 메서드와 static 메서드

  • 디폴트 메서드는 추상 메서드의 기본적인 구현을 제공하는 메서드로, 추상 메서듣가 아니기 때문에 디폴트 메서드가 새로 추가되어도 해당 인터페이스를 구현한 클래스를 변경하지 않아도 된다
  • 접근 제어자는 public
  • 새로 추가한 디폴트 메서드가 기존의 메서드와 이름이 중복되어 충돌하는 경우
    - 여러 인터페이스의 디폴트 메서드 간의 충돌은 인터페이스를 구현한 클래스에서 오버라이딩을 한다
    - 디폴트 메서드와 조상 클래스의 메서드 간에 충돌이 일어나는 경우 조상 클래스의 메서드가 상속되고 디폴트 메서드는 무시된다

내부 클래스

내부 클래스란?

  • 클래스 내에 선언된 클래스
  • 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다
  • 코드의 복잡성을 줄일 수 있다(캡슐화)

종류와 특징

  • 인스턴스 클래스 : 외부 클래스의 멤버변수 선언위치에 선언, 외부 클래스의 인스턴스 멤버처럼 다루어진다
  • 스태틱 클래스 : 외부 클래스의 멤버변수 선언위치에 선언, 외부 클래스의 static 멤버처럼 다루어진다
  • 지역 클래스 : 외부 클래스의 메서드나 초기화 블럭 안에 선언, 선언된 영역 내부에서만 사용됨
  • 익명 클래스 : 클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스(일회용)

제어자와 접근성

  • 제어자, 접근 제어자 사용 가능
  • 스태틱 클래스만 스태틱 멤버를 가질 수 있다
  • fianl과 static이 동시에 붙은 변수는 상수이기 때문에 모든 내부 클래스에서 정의 가능

익명 클래스

  • 클래스의 선언과 객체의 생성을 동시에 함
  • 한번만 사용될 수 있고 하나의 객체만을 생성할 수 있음

0개의 댓글