본문 바로가기
Language/Java

[Java] 자바 인터페이스 (interface) 코드로 이해하고 정리

by 시믈리에 2020. 9. 13.

인터페이스란


  • 구현된 것이없고 밑그림만 있는 설계도이다.
  • 일반 메서드 또는 맴버 변수를 가질수 없고 추상메서드와 상수만 가질수있다.
  • 인터페이스는 표준, 약속, 규칙이다.

 

 

표준, 약속, 규칙을 이해하자


만약 모든 은행이 가지고 있는 돈이 어떤은행을 사우디아라비아 돈을 가지고있고 등등 각각 다르다

그래서 그 돈을 표준을 하기위해 인터페이스를 아래와 같이 인터페이스를 만든다

public interface KoreanBank {
	void BankName();
	KrMoney HasMoney();
}

만약 A은행은 미국 돈을 저장하고 있다 합시다

A은행은 한국에 있는데 A은행이 가지고 있는돈을 한국은행에게 krMoney 클래스로 보내야 한다 할때

A은행은 krMoney로 바꿔서 내야한다.

다른은행도 돈을 krMoney로 바꿔야 한다는 규칙이 있다

 

class A implements KoreanBank {
	USAmoney money;

	@Override
	public void BankName() {
		System.out.println("A"); //은행이름이 A임을 출력한다
		
	}

	@Override
	public krmoney HasMoney() {
		return new krmoney.set(money.getInt()*1180); //미국돈에다 *1180원으로 임의로 환율을 해준것이다
	}
}

메시지를 받은 한국은행이 특정은행 몇몇의 krmoney의 돈의합을 알고싶을때

	public static void main(String[] args) {
		int money;
		KoreanBank[] b = {new A(),new B()};

		for (KoreanBank bank : b) {
			money += bank.HasMoney().toInt();
		}
		System.out.println("현제 A은행과 B은행의 KRmoney는"money+"원 입니다");
	}

위와 같이 한국돈을 표준을하고 KoreanBank를 받은 클래스는 void BankName(); KrMoney HasMoney(); 이 두개의 메서드를 구현할수 있도록 약속한것이다

 

위에 내용은 이해를 돕기위해 new a() new b()를 썼지만 인터페이스의 이해를 하기위해 코드를 짜봤다

 

 

 

 

 

추상클레스와 인터페이스 비교


추상클래스를 배우고 이글을보고 있으면 추상클래스와 인터페이스가 비슷한것이라 생각한다

그래서 비교까지 하고 마무리를 해보도록 하겠습니다

  • 추상클레스는 와 인터페스는 스스로 객체를 생성할수가 없다 
  • 둘다 구현부를 만들어줄 클래스가 필요하다

라는 공통점때문에 이해에 어려움이 있다

이론을 설명하는것보단 코드로 설명하겠다

이해를 하기위해 동물을 예로 들어봅시다

public abstract Animal {
	public abstract void PlaySound();
}

동물들은 소리를 낸다

public interface fly {
	void fly();
}

그리고 하늘을 나는 동물들은 날수있다는 공통점이 있다

public class bird extends Animal implements Fly{
	@Override
	public void fly() {
		System.out.println("okay");

	}
	public void PlaySound() {
		System.out.println("까악까악")

	}
}

새는 동물에 속해있고(extends) 하늘을 날수있다(implements)

Animal을 추상적인 클래스로 하는 이유는 각 동물마다 내는 소리가 다르기 때문이다

 

코드를 보면서 방금 위에 두문장처럼 이해를 하면 도움이 된다 

마무리


위에 내용을 읽고 이해가 가셨나요?

이해가 가셨으면 다행입니다

위에서 나온 krMoney는 임의로 이해를 돕기위한 크래스이며 넘어가주시면 되겠습니다

틀린부분이 이해를 관점으로 보고도 아니다 싶으시면 댓글 남겨주시면 수정하도록 하겠습니다 :)

 

 

댓글