본문 바로가기
[ JAVA ]/JAVA

[ Java ] Interface 1

by 환이s 2022. 12. 19.
CHAPTER 12. Interface 알아가기

 

1 ) 인터페이스(Interface)란?

 

만약 자식 클래스가 여러 부모 클래스를 상속받을 수 있다면?? 다양한 동작을 수행할 수 있는 큰 장점을 가질 수 있습니다.

하지만 클래스를 이용하여 다중 상속을 할 경우 메소드 출처의 모호성 등 여러 가지 문제가 발생할 수 있어서 자바에서는 클래스를 통한 다중 상속은 지원하지  않습니다. 

 

하지만 다중 상속의 이점을 버릴 수는 없기 때문에 자바에서 인터페이스(Interface)라는 것을 통해 다중 상속을 지원하고 있습니다.

결론으로는 자바의 다형성을 극대화하여 개발코드 수정을 줄이고 프로그램 유지보수성을 높이기 위해 인터페이스(Interface)를 사용합니다.

 

2 ) 인터페이스(Interface) 특징

 

- 다중 상속이 가능합니다.

(자식 클래스가 여러 부모 인터페이스들을 상속 받을 수 있습니다.)

 

- 모든 Method가 abstract인 추상클래스와 동일합니다

(자식 클래스가 무조건 구현해야 됨으로 구현부 위치가 명확해야 합니다.)

 

- 인터페이스에서 변수를 선언하면, 이는 곧 상수가 됩니다.

 

- 생성자 생성 불가

(디폴트 생성자, 인자 있는 생성자 모두 생성이 불가합니다.)

 

3 ) 인터페이스(Interface) 구현

 

인터페이스는 interface 키워드를  통해 선언할 수 있으며, implements 키워드를 통해 일반 클래스에서 인터페이스를 구현할 수 있습니다.

 

예시 : Add 인터페이스

 

인터페이스의 구성 멤버 : 상수 , 메소드 ( 인터페이스는 객체로 생성할 수 없기 때문에 생성자를 가질 수 없습니다. )

 

문제 1 ) 

 

사칙연산을 하는 계산기를 interface를 활용하여 코딩하시오.
- interface: Calculator
- implement class: CalculatorImpl
- method: add(), sub(), mul(), div()

맨 처음 Calculator 인터페이스를 만들어서 메소드(add(), sub(), mul(), div()) 코드 작성을 했다.

 

 

그리고 구현 할 CalculatorImpl 클래스를 만들어서 implements 하면 아래 사진처럼 에러가 나온다.

 

 

이 에러는 메서드를 구현하라는 에러이므로 인터페이스의 추상 메서드를 실체 메서드로 구현하자.

(만약 하나라도 추상 메서드가 구현되지 않으면, 구현 클래스는 추상 클래스로 선언되어야 합니다.)

 

 

메서드를 구현하고 사칙연산에 맞는 출력 값을 넣어주자.

 

 

구현 클래스를  필드에 활성화하고 결과를 확인하기 위해  x = 5 , y = 10이라는  값을 주었다.

 

 

인터페이스는 개발 코드와 객체가 서로 통신하는 접점 역할을 한다. 개발 코드가 인터페이스의 메소드를 호출하면 인터페이스는 객체의 메소드를 호출시킨다. 때문에 개발 코드는 객체의 내부 구조를 알 필요가 없고 인터페이스의 메소드만 알고 있으면 된다.

 

위 문제를 통해서  인터페이스의 장점을 볼 수 있다.

 

장점 ) 

 

1. 대규모 프로젝트 개발 시 일관되고 정형화된 개발을 위한 표준화가 가능하다.

2.클래스의 작성과 인터페이스의 구현을 동시에 진행할 수 있으므로, 개발 시간을 단축할 수 있다.

3. 클래스와 클래스 간의 관계를 인터페이스로 연결하면, 클래스마다 독립적인 프로그래밍이 가능하다.


4 ) Interface 의 다형성 

 

인터페이스에선 4가지를 정의하거나 구현할 수 있다.

 

1.상수

타입 상수명 = 값;

2.추상 메소드
타입 메소드명(매개변수, ...);

3.디폴트 메소드
default 타입 메소드명(매개변수, ...);
       (구현부)
}

4.정적 메소드
static 타입 메소드명(매개변수){
       (구현부)
}

 

1. 인터페이스 상수 필드

 

- 인터페이스에서 값을 정해줄 테니 함부로 바꾸지 말고 제공해주는 값만 참고해야 한다.

- 상수명은 대문자로 작성하되, 서로 다른 언어는 언더바(_)로 연결하는 것이 관례이다.

 

 

2. 추상 메소드

 

-인터페이스를 통해 호출된 메소드는 최종적으로 객체에서 실행된다. 따라서 인터페이스의 메소드는 실행 블록이 필요 없는 추상 메소드로 선언한다.

-인터페이스에 선언된 추상 메소드는 모두 public abstract의 특성을 갖기 때문에 이를 생략해도 자동적으로 컴파일 과정에서 붙는다.

 

 

3. 디폴트 메소드

 

- 인터페이스에 선언되지만 실제 실행하는 구현 코드를 작성하는 메소드

- 인터페이스에서 기본적으로 제공해주지만, 마음에 안 들면 각자 구현해도 괜찮다는 식이다.

- 인터페이스를 쉽게 바꾸어서 미래에 프로그램이 쉽게 변화할 수 있는 환경을 제공해주기 위해 자바 8에 추가된 인터페이스의 새로운 멤버이다.

 

 

4 ) 정적 메소드

 

-디폴트 메소드와 같이 실제 실행되는 구현 코드를 작성하는 메서드이며, 디폴트 메소드와 달리 객체가 없어도 인터페이스만으로 호출 가능하다.

-public을 생략하더라도 자동으로 컴파일 과정에 붙는다.

 


마치며 

 

다음 포스팅에 인터페이스의 다중 상속 , 구현과 상속 함께 쓰는 법에 대해 이어 나가겠습니다. 고생하셨습니다!!

728x90

'[ JAVA ] > JAVA' 카테고리의 다른 글

[ Java ] JDK 기본 클래스 1  (0) 2022.12.22
[ Java ] Interface 2  (2) 2022.12.21
[ Java ] 추상 클래스  (0) 2022.12.15
[ Java ] 상속과 다형성  (0) 2022.12.14
[ Java ] 배열 ( ArrayList )  (0) 2022.12.13