Interface (인터페이스), Marker Interface

김지원·2022년 6월 21일
0

Java

목록 보기
37/38

< 자바 1 개념정리 >

변수
: 값을 담는 저장공간

입출력 함수
: 출력 (println, printf, print) / 입력 (Scanner)
개발자를 위해 사용한다. 입출력 함수로 오류를 확인해야한다.

제어문

  • 조건문
    - if: 다양한 조건과 부등호를 사용할 수 있음
    - switch : 등호만 사용가능
  • 반복문
    - for: 변수가 있고 변화량이 필요할 때 사용
    - while : 변수가 없다.

배열

  • 1차원 배열
  • 2차원 배열

메서드( 자바의 꽃이다... )

  • 이름(소괄호 )
  • 단 키워드 뒤에 (소괄호)는 메서드가 아니다.
  • 가장 중요한 기능 : 오버로딩!
  • 사용 이유 : 반복되는 작업을 효율적으로 쉽게 사용하기 위해 메서드에 담는다.

클래스

  • 사용 이유 : 반복되는 필드(메서드와 변수)들을 공통요소를 묶어서 여러 객체로 나누어서 쓰자.
  • 클래스를 만드는 순간 기본적으로 생성자가 내부에 존재한다. 클래스 이름과 같지만 (소괄호)가 있고 메서드의 기능과 같다. but return 타입이 없다!

인터페이스는 추상클래스와 주로 함께 쓰인다.

추상클래스 (불완전한 클래스)

:- 추상적인 내용만 정의하고 있는 클래스로 구체적인 내용은 하위 클래스에서 구현되도록 해놓은 클래스

  • 추상클래스는 (부모) 클래스들의 (자식) 공통요소들을 가상화 시켜놓는다.
  • 객체화는 가능하나 잘 사용하지 않는다.(목적에 어긋난다.) -> 미구현된 메서드가 있기 때문에 객체화해서 필드로 접근하는건 거의 하지 않는다.
  • 부모 추상 클래스의 역할은 단지 자식 클래스를 만들 때 도와주는 역학을 수행하기 위해 존재한다. (다형성)
  • 자식 클래스에서 사용할 메서드의 이름만 갖고 있다. (미구현 상태) 즉, {바디}를 갖지 않는다.
  • 그 메서드를 추상메서드라고 하며, abstract 키워드가 앞에 붙는다.
  • 일반 메서드도 선언 가능하다.
abstract 추상클래스명 {
	abstract 리턴타입 추상 메서드 (매개변수,...);
}

추상클래스의 용도

: 안에서 구현되지 않은 상태로 메서드를 만든 후 (미구현) 자식클래스를 통해서 재정의로 구현한다.

Interface (인터페이스)

:추상 클래스를 고도화 시킨 문법이며, 반드시 추상 메서드와 상수만 선언해야
한다.

  • 다른 클래스에서 인터 페이스를 지정할 때에는 implements를 사용한다.
  • 지정된 인터페이스가 가지고 있는 추상 메서드들을 반드시 재정의 해야한다.
  • 인터페이스는 클래스가 아니다. 일반메서드는 존재할 수 없다.

부모 중에 똑같은 이름의 필드가 있을 수도 있어서 자바에서는 다중상속이 불가능하다.
추상클래스에 일반메서드가 작성이 가능한건 다중상속이 안되기 때문이다.
인터페이스는 이렇게 할 필요가 없다. extends 하나 상속받아서 다중상속 받을 수 없을 때
그 뒤에 implements을 사용해 인터페이스를 사용해서 다중으로 상속을 받으면 된다.


< example >
일등병, 이병, 상병, 병장 클래스를 만들고
군인이면 해야할 일들을 정의만 해놓은 인터페이스를 상속받아 구현해보자.

-> 인터페이스 생성

  • Soldier 라는 인터페이스를 만들고 안에 미구현된 추상메서드 5개를 정의해 주었다.
  • void work(); : 미구현된 추상 메서드 abstract 가 생략이 되었다.
  • int arms = 2; 변수에는 final static가 생략되어있다.

-> 인터페이스를 상속받는 이등병, 일병, 상병 클래스

  • 이등병, 이병, 상병 동일하게 Soldier 인터페이스를 implements해서 구현한다.
  • Soldier 인터페이스가 가진 모든 추상메서들을 강제적으로 구현해야한다.

!! 그런데 병장은 강제적으로 하지 않아도 되는 부분이 생긴다. -> salute 와 work!
그래서 필요한것만 골라서 재정의하는 방법도 알아야한다.

강제성을 부여해주는건 추상메서드인데 걔를 이미 한번 재정의를 했다고 생각해보자.
=> 이 병장을 자식 클래스로써 상속을 받게 되면 강제성이 사라진다.
부모클래스에서 재정의한 애들은 일반메서드이기 때문에 자식메서드에서 골라 사용할 수 있다.

그렇다면 인터페이스를 상속받을 클래스가 필요하다. 그 클래스를 추상클래스로 받자!

Adapter (인터페이스를 재정의해서 골라서 사용하기 위해 존재)

  • Soldier인터페이스를 상속받는 Army 추상 클래스를 만들어서 추상 메서드들을 재정의 해주었다.

Army의 목적은 Soldier에 있는 강제성있는 애들을 골라서 쓰기 위해서 존재한다.
-> 이러한 목적으로 만들어진 추상클래스는 이름에 Adapter가 붙는다.

이미 인터페이스를 추상클래스에 지정해놓은 Adapter 있다.
=> 원하는거만 골라서 재정의할 수 있다.

  • 골라서 사용해야하는 병장클래스에서 Army Adapter를 상속받아서 골라서 재정의 하면 된다!!

< 정리 >
병장말고 나머지는 강제성이 부여되서 인터페이스를 사용하고
병장은 골라써야하기 때문에 Adapter를 만들고 Adapter를 상속받는다.


회사에서 자주 쓰는 인터페이스이다. 웹개발, 안드로이드개발에 자주 사용.

Marker Interface

  • 클래스들의 공통 그룹명으로 인터페이스를 생성하고 아무것도 구현해놓지 않는다. (비어있다)
    즉, 그 클래스들이 같은 그룹으로 묶였다는 표시를 하기 위해 사용한다.

  • 얘가 Marker Interface가 되는 것이다.

0개의 댓글

관련 채용 정보