[자바의정석]Java - 객체지향(4) #006

박정현·2022년 1월 11일
0

Java

목록 보기
6/16
post-thumbnail

인터페이스

인터페이스

  • 추상 메서드의 집합 + 부수적인요소(static 메서드,디폴트 메서드,상수)
  • 구현된 것이 전혀 없는 설계도 , 껍데기 (모든 멤버가public)

추상클래스 인터페이스 차이점

  • 추상클래스는 일부만 추상 메서드를 갖고있기만하면 추상클래스
  • 추상클래스는 extends 로 구현
  • 인터페이스는 전부 추상 메서드만 갖고있다
  • 인터페이스는 implements 로 구현
  • 인터페이스는 (인스턴스변수,생성자,인스턴스메서드)iv를 가질 수 없다
interface ex01 { 
	public static final 타입 상수이름 =;
    public abstract 메서드이름(매개변수목록);
}
  • 인터페이스의 모든 메서드는 항상 public abstract이다 그래서 생략가능
  • 인터페이스의 상수는 항상 public static final 이다

인터페이스의 상속

  • 인터페이스의 조상은 인터페이스만 가능(Object가 최고 조상이 아니다!)
  • 인터페이스는 다중 상속이 가능하다(추상메서드는 충동해도 문제 없다)
    이름이 같아도 구현부가 어처피 없기때문에 상관없다

인터페이스의 구현

  • 인터페이스에 정의된 추상 메서드를 완성하는 것
class 클래스이름 implements 인터페이스이름 {
	//인터페이스에 정의된 추상메서드를 모두 구현해야 한다
}
  • 일부만 구현 하는 경우, 클래스 앞에 abstract 를 붙여야한다

인터페이스와 다형성

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

  • 인터페이스도 구현 클래스의 부모? yes
  • 인터페이스 타입 매개변수는 인터페이스 구현한 클래스의 객체만 가능하다
  • 다형성 사용 가능하다
  • 인터페이스를 메서드의 리턴타입으로 지정할 수 있다
  • 메서드의 반환 타입이 인터페이스면 인터페이스를 구현한 객체를 반환한다
  • 형변환 가능하면 리턴해줄수있다

인터페이스의 장점

장점

  • 기계의 껍데기 역할

  • 두 대상 간의 '연결,대화,소통'을 돕는 '중간 역할'을 한다

  • 선언(설계)와 구현을 분리시킬 수 있게 한다 (껍데기 알맹이 분리)

  • 개발 시간을 단축할 수 있다

  • 변경에 유리한 유연한 설계가 가능하다

  • 표준화가 가능하다 [ ex)JDBC ]

  • 서로 관계없는 클래스들을 관계를 맺어줄 수 있다

디폴트 메서드와 static 메서드

  • 인터페이스에 디폴트 메서드, static메서드 추가 가능
  • 인터페이스에 새로운 메서드를 추가하기 어려움 ->해결책: 디폴트 메서드
  • 디폴트 메서드는 인스턴스 메서드(인터페이스 원칙 위반)
  • 디폴트 메서드는 기존 메서드와 충돌할 수 있다 해결책 으론
  1. 여러 인터페이스의 디폴트 메서드 간의 충돌 =
    인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩 해야된다
  2. 디폴트 메서드와 조상 클래스의 메서드 간의 충돌 =
    조상 클래스의 메서드가 상속되고, 디폴트 메서드는 무시된다
  • 충돌나면 그냥 직접 오버라이딩 하자!

내부클래스의 종류,특징,선언

내부 클래스의 장점

  • 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근 할 수있다
  • 코드의 복잡성을 줄일 수 있다(캡슐화) 밖에서 안쓰는걸 내부에 생성
  • 내부 클래스와는 쉽게 접근이 가능하다

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

  • 내부클래스 앞에는 private , static 다 가능하다
  • 내부클래스에서 static 을 사용하려면 내부클래스가 static일 때만 가능하다
  • final static 은 상수이기 때문에 가능하다
  • 스태틱 클래스는 외부 클래스의 인스턴스 멤버에 접근 x
  • 내부클래스는 외부클래스의 private 멤버도 접근 가능
  • 외부클래스의 지역변수는 final이 붙은 상수만 접근 가능하다

익명 클래스

  • 이름이 없는 일회용 클래스. 정의와 생성을 동시에한다
  • ex) ActionListener
	new 조상클래스이름(){
    	//멤버선언
    }

	new 구현인터페이스이름(){
    	//멤버선언
    }
profile
빠샤

0개의 댓글

관련 채용 정보