Java

자바 객체 지향 프로그래밍에서 Interface(인터페이스)를 활용하기

567Rabbit 2024. 6. 3. 15:48

Interface의 사용 목적과 정의

 

- 인터페이스는 여러 개의 클래스가 동일한 메서드를 구현하도록 강제할 때,

  즉 일관된 방법으로 서로 다른 클래스들을 다룰 때 주로 사용된다.

 

- 인터페이스는 클래스가 구현해야 하는 메서드의 목록을 정의하는 데 사용된다.

 

- 멤버변수가 상수와 함수(메소드)로만 이루어져있어야 interface를 사용할 수 있다.

 

- 즉, 변수는 선언될 때 초기화되어야 하며, 이후 변경될 수 없다

 

 

 

- 상수(constant)란?

 

: 한번 데이터를 저장하면, 그 다음부터는 사용만 할 수 있다.

 

: 즉 한번 저장하면 다른곳에서 데이터값을 바꾸면 안된다.

 

: 상수는 일반적으로 대문자로 작성된다.

 

 

 

 

Interface 사용하기

 

 

아래와 같이 여러개의 클래스를 상속받으려고 하면 오류가 발생한다.

 

 

 

여러 개를 함께 사용하고 싶다면 interface를 사용해야 한다.

 

 

Card와 Player를 class가 아닌 interface로 수정해준다.

 

 

Card 클래스를 인터페이스로 변경

 

Player 클래스를 인터페이스로 변경

 

 

 

Card에 변수와 함수(메소드)를 작성해준다.

package model;

public interface Card {
	
	//상수로 만들려면 대문자로만, 'final'을 붙여서 만든다. 상수는 heap이 아니라 메모리의 Data 영역에 저장된다.
	//메모리 영역이 heap이 아니라 Data로 달라지기 때문에 static을 써야한다.
	
	public static final int CLOVER = 1; 
	public static final int HEART = 2;
	public static final int DIAMOND = 3;
	public static final int SPADE = 4;
	
	public static final String NAME = "Poker";
	
    	//이미 static으로 변수를 선언했기 때문에 함수에서는 static을 쓰지 않아도 된다.
	public String getCardNumber(); 
	public void print();
	
}

 

 

 

위에서 설명한 static을 사용해야 하는 부분이 이해가 안된다면

 

https://codebunny99.tistory.com/123

 

자바의 메모리(Memory) 영역 개념

1. 메소드 영역(Method Area) (= 데이터 영역)  - 메소드 영역은 클래스 정보(클래스 이름, 메소드, 변수)와 같은 런타임 상수 풀을 포함하고 있는 메모리 영역이다.- Static 영역이라고도 하며 전역변

codebunny99.tistory.com

 

를 참고하자.

 

 

 

 

다음으로, MyCard에서 인터페이스 받을 것이므로, MyCard 클래스에서 implements로 Card, Player를 작성해준다.

 

인터페이스는 상속과 중복으로도 사용될 수 있다.

 

그리고, 개체를 연결한 다른 인터페이스의 함수를 Overriding(오버라이딩) 해주면, MyCard 클래스에서 사용이 가능하다.

 

GrandParent에서 상속받고자 하는 print() 함수 또한 오버라이딩 해주었다.

 

 

 

 

이처럼 Interface를 사용할 수 있으며 Interface 또한 협업을 위해서 사용하는 도구이다.