플레이데이터 - 8일차 자바 공부

Kim Hyen Su·2023년 7월 10일

※복습

  • 다형성 = 상속+오버라이딩+형변환

🎇인터페이스

  • 객체의 교환성을 높여주기 때문에 다형성을 구현하는데 매우 중요한 역할.(다형성의 활용 빈도를 높여준다.)
  • 개발 코드와 객체가 서로 통신하는 접점(중간) 역할.
  • 인터페이스 타입 객체의 메서드를 호출하면 인터페이스는 객체의 메서드를 호출시킨다.
  • 따라서 개발 코드는 객체의 내부 구조를 알 필요가 없고 인터페이스 내 메서드 이름만 알면 된다.
  • 중간에 인터페이스를 두는 이유는 개발 코드를 수정하지 않고 사용하는 객체를 변경할 수 있도록 하기 위해서이다.
  • 인터페이스는 하나의 객체가 아니라 여러 객체들과 사용이 가능하기 때문에 어떤 객체를 사용하는 냐에 따라서 실행 내용과 반환값이 다를 수 있다. 개발 코드 측면에서는 코드 변경 없이 실행 내용과 리턴값을 다양화 할 수 있다는 장점을 가지게 된다.
  • 객체의 사용 설명서로 메서드를 직접 구현하지 않고 정의만 해놓은 타입이다.

인터페이스 구성

  • 상수 필드
  • 추상 메서드
    ※ 객체 생성이 불가하여 생성자가 없다.

인터페이스 선언

  • public interface 인터페이스명 {...}

상수 필드 선언

  • 객체 생성이 불가능하여 메모리 할당 받지 못하기 때문에 필드는 상수로만 선언이 가능하다.
  • [public static final] 타입 상수명 = 값;

추상 메서드 선언

  • [public abstract] 반환타입 메서드명(매개변수);

인터페이스 구현

  • 인터페이스를 구현할 클래스는 인터페이스 내 정의된 추상 메서드를 구현해줘야 한다.(강제 재정의)
  • public class 구현클래스명 implements 인터페이스명1, 인터페이스명2, ... {...}
  • 다수의 인터페이스를 하나의 클래스에서 구현할 수 있다.

인터페이스 사용

  • 인터페이스 타입은 필드, (생성자, 메서드) 매개변수, 반환값 타입으로 사용 가능하다.

🎇인터페이스 타입 변환과 다형성

자동타입변환

  • 구현 클래스의 객체가 인터페이스 타입으로 자동 변환되는 것.
  • 인터페이스타입 변수 = 구현클래스 객체;

매개변수의 다형성

  • 일반적으로 메서드의 매개변수를 인터페이스 타입으로 선언한 경우, 메서드 호출 시 구현한 클래스 타입의 매개변수를 입력 받을 수 있다.(다형성)

강제타입변환

  • 구현클래스타입 변수 = (구현클래스타입) 인터페이스타입 변수;

객체타입확인

  • instancof 연산자 사용하여 객체의 타입을 확인 가능.(if 조건문과 함께 사용)

인터페이스 상속

  • public interface 인터페이스명 extends 상위인터페이스1, 상위인터페이스2 {...}

🎇중첩(내부) 클래스와 중첩 인터페이스

중첩(내부) 클래스

  • 클래스 내부에 선언한 클래스.
  • 중첩(내부) 클래스 장점 : 두 클래스의 멤버들을 서로 쉽게 접근이 가능하고, 외부에는 불필요한 관계 클래스를 감춤으로서 코드의 복잡성을 줄여준다.
  • 멤버 클래스 : 멤버변수로서 선언되는 중첩 클래스.
  • 지역 클래스 : 생성자 또는 메서드 내부에서 선언되는 중첩 클래스.

중첩(내부) 클래스 명명 규칙

  • A $ B.class : A(바깥 클래스), B(내부 클래스)

인스턴스 멤버 클래스

  • 인스턴스 멤버 클래스 내에서는 static(정적) 멤버 사용 불가.

정적 멤버 클래스

  • 모든 멤버 사용이 가능하다.

지역 클래스

  • 메서드 내부에서 선언한 클래스.
  • 메서드 내부에 선언되어 메서드 종료 시 메모리가 사라진다.

중첩(내부) 클래스의 접근 제한

  • 내부 클래스와 외부 클래스 간에는 접근 제한이 가능하다.
  • 내부에 있는 클래스들은 클래스 자신의 멤버로 여기고, 외부 클래스의 멤버는 다른 클래스의 멤버로 여기면 된다.

지역 클래스에서 사용 제한

  • 메서드가 종료되어도 메서드 내 변수의 참조가 끊기지 않은 경우, 즉, 메서드 내부 클래스에서 메서드 지역 변수를 사용한 경우, 참조가 끊기지 않아서 메서드가 종료된 후에도 제거되면 안된다.
  • 이전에는 변수 선언 시 final 예약어를 붙여주지 않으면 예외가 발생했지만, JDK1.8부터 메서드 내 지역변수에 final 예약어를 생략하여도 컴파일러가 자동으로 붙여주도록 바뀌었다.(final 생략 가능)
  • 이러한 변수들은 선언 시, 상수 영역에 메모리가 생성되어 final 변수로 취급된다.

중첩(내부) 클래스에서 외부 클래스 참조 얻기

  • 외부 클래스.this.필드 | 메서드();

중첩 인터페이스

  • 클래스 내부 인터페이스.
  • 인스턴스 멤버 인터페이스와 정적 멤버 인터페이스 모두 사용 가능하다. 주로 정적 멤버 인터페이스를 많이 사용하는데 UI 프로그래밍에서 이벤트 처리 목적으로 많이 활용된다.
  • 클래스 내부에 인터페이스의 다형성을 이용하여, 여러 객체들을 setter를 통해 사용할 수 있다.
    - 즉, 하나의 메서드로 다양한 기능을 사용할 수 있다.
profile
백엔드 서버 엔지니어

0개의 댓글