[Java] 간단 정리 6

J_Log·2023년 5월 29일
0

Java

목록 보기
6/6

배열로 여러 종류의 객체 다루기

  • 조상 타입의 배열에 자손들의 객체를 담을 수 있음

  • 다형성의 장점

  1. 다형적 배개변수
  2. 하나의 배열에 여러 종류 객체 저장

추상클래스, 추상메서드

추상 클래스(abstract class)

  • 미완성 설계도, 미완성 메서드를 갖고 있는 클래스
  • 제어자 abstract를 앞에 붙임
  • 다른 클래스 작성에 도움을 주기 위한 것, 인스턴스 생성 불가
  • 상속을 통해 추상 메서드를 완성해야 인스턴스 생성 가능

추상 메서드(abstract method)

  • 미완성 메서드, 구현부가 없는 메서드
  • 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우, 만약 자손에서 일부 메서드를 구현하지 않는다면 abstract 제어자를 붙여서 추상 메서드를 선언해야 함 -> 추상 메서드(미완성 메서드)가 존재함으로 그 클래스 또한 abstract
  • 추상 메서드 호출 가능(호출 시 선언부만 필요)

인터페이스

  • 추상 메서드의 집합
  • 구현된 것이 전혀 없는 설계도, 모든 멤버가 public
  • 상속 받을 시 implements 이용
  • 인터페이스의 조상은 인터페이스만 가능(최고 조상 Object 아님)
  • 다중 상속 가능(구현된 메서드가 없기 때문에 문제 없음)

인터페이스와 다형성

  • 인터페이스 타입 파라미터는 인터페이스를 구현한 클래스의 객체만 가능
  • 인터페이스를 메서드의 리턴 타입으로 지정할 수 있음

인터페이스의 장점

  • 두 객체 간의 '연결, 대화, 소통'을 돕는 중간 역할을 함
  • 선언(설계)과 구현을 분리시켜 줌
  • 개발 시간 단축
  • 변경에 유리한 유연한 설계 가능
  • 표준화 가능
  • 서로 관계없는 클래스들에 관계를 맺어줄 수 있음

디폴트, static 메서드

  • 인터페이스는 추상 메서드의 집합이다. 근데 default와 static을 곁들인..(jdk 1.8부터)
  • 여기저기 상속받은 자손들이 있기에 인터페이스에 새로운 메서드를 추가하기 어려움 -> default method 사용
  • default 메서드는 인스턴스 메서드(인터페이스 원칙 위반)
  • 디폴트 메서드가 기존의 메서드와 충돌할 때 해결책
  1. 여러 인터페이스의 디폴트 메서드 간 충돌 -> 인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩해야 함
  2. 디폴트 메서드와 조상 클래스의 메서드 간 충돌 -> 조상 클래스의 메서드가 상속되고, 디폴트 메서드는 무시됨

    모두 오버라이딩하면 해결됨

내부 클래스(inner class)

  • 클래스 안 클래스

내부 클래스의 장점

  • 내부 클래스에서 외부 클래스의 멤버들에 쉽게 접근 가능
  • 코드의 복잡성을 줄일 수 있음 -> 캡슐화
  • 익명 클래스(anonymous class)를 제외한 기존의 iv, cv, lv와 포지션이 동일함 -> instance class, static class, local class

내부 클래스의 제어자와 접근성

  • 내부 클래스의 제어자는 변수에 사용 가능한 제어자와 동일
  • static 멤버는 static 클래스에만 정의할 수 있음(단, final static 상수는 모두 정의 가능)
profile
공부합시다

0개의 댓글