티스토리 뷰

프로그래밍/Java

자바 ! 인터페이스 (interface)

나는연어다 2017. 4. 30. 12:57

인터페이스란 ? 완벽한 abstract 클래스라고 표현할 수 있다.

객체와 객체사이의 상호작용을 나타낸다 (약속)


(abstract 클래스를 다시 공부하시려면 링크를 이용하세요.)


인터페이스의 특성

인터페이스


1. 구현하기 위해 implement를 사용


2. 오직 추상메소드와 상수로만 이루어져 있다.


3. 인터페이스 안에서 선언되는 메소드는 모두 묵시적으로 public, abstract




인터페이스와 추상클래스

 No.

인터페이스

추상클래스

  1


클래스가 아니며 interface로 선언


클래스(class)이다.

  2


public abstract 추상메소드만 가진다.


일반메소드, 추상메소드를 가질 수 있다.

  3


구현을 하며 implements로 서브 클래스를 정의한다.


확장 가능하며 extends로 하위 클래스 정의한다.

  4


다중 구현(상속)이 가능하다.


단일 상속만 가능하다.

  5


변수는 가질 수 없으며, static final 형태의 상수만 가진다.



변수와 상수 모두 가질 수 있다.




기본적인 이론을 가지고 실습을 통해 공부하겠습니다.

처음으로 인터페이스를 배우기 전 객체지향 프로그래밍을 진행 한 경우입니다.

미닫이, 여닫이 문 클래스를 만들고 House라는 클래스를 만들어서 메인 클래스에서 사용하는 예 입니다.

여닫이 문 클래스 입니다.

// 여닫이 문 클래스
public class HingedDoor {
	
	public void openDoor(){
		System.out.println("문을 앞으로 밀어서 열기");
	}
	public void closeDoor(){
		System.out.println("문을 뒤로 당겨서 닫기");
	}	
}



미닫이 문 클래스 입니다.

// 미 닫이 문
public class SlideDoor {

	public void openDoor(){
		System.out.println("문을 옆으로 밀어서 연다.");
	}
	public void closeDoor(){
		System.out.println("문을 옆으로 밀어서 닫는다.");
	}
	
}



House1 클래스 입니다.

public class House {
	// extends SlideDoor는 안된다.
	// 좋지 않은 관계 이다.

	// 문
	// 슬라이드 도어 (미닫이 문)
	// 1단계
	// House 클래스가 SlideDoor 클래스를 가지고 있다. ('House' Has - a 'SlideDoor')
	private SlideDoor slideDoor; // House가 SlideDoor를 가졌다.
	private HingedDoor hingedDoor;
	public House() {
		slideDoor = new SlideDoor();
		hingedDoor = new HingedDoor();
	}

	public void in() {
		slideDoor.openDoor();
		System.out.println("집에 들어옴");
	}

	public void out() {
		System.out.println("집에서 나감");
		slideDoor.closeDoor();
	}
	public void in2() {
		hingedDoor.openDoor();
		System.out.println("집에 들어옴");
	}

	public void out2() {
		System.out.println("집에서 나감");
		hingedDoor.closeDoor();
	}

}



메인 클래스 입니다.

public class ExampleHouse{
	public static void main(String[] args) {
		House house=new House();
		house.in();
		house.out();
	}
}



위 예제와 다르게 인터페이스를 사용하여 실습하도록 하겠습니다.

인터페이스 클래스 입니다.

public interface IDoor {

	// 인터페이스의 특징
	// 1) 인터페이스 내의 모든 메소드는 추상화된 형태의 메소드이다. (자동으로 public abstract가 묵시적으로 설정된다.)
	// 2) 일반적인 클래스처럼 멤버변수, 멤버메소드를 가질 수 없다.
	// 		=> 구현된 메소드와 멤버변수는 인터페이스에 작성할 수 없다.
	// 3) static 형태의 메소드는 구현된 형태로 존재할 수 있다.
	// 4) 인터페이스의 모든 변수는 public static final 형태의 상수로 존재한다.
	// 5) 인터페이스는 확장 (extends)의 개념이 아닌 implements (구현)의 개념으로 접근한다.
	// 6) 클래스와 다르게 다중상속 (구현)이 가능하다.

	// 일반 메소드 형태로 구현이 불가
	// public void foo(){}
	
	// static 메소드는 구현 가능
	public static void goo(){
		System.out.println("인터페이스 내에 사용 가능");
	}
	
	int temp = 10; // 변수 선언 시 자동으로 static final(상수)화
	
	///////////////////////////////////////////////
	// 인터페이스에는 추상화 메소드만 있어야 한다.
	void openDoor();
	void closeDoor();
	
}



인터페이스를 사용한 여닫이 문 클래스 입니다.

public class HingedDoor2 implements IDoor{
	
	
	@Override
	public void closeDoor() {
		// TODO Auto-generated method stub
		System.out.println("문을 앞으로 밀어서 연다.");
	}
	
	@Override
	public void openDoor() {
		// TODO Auto-generated method stub
		System.out.println("문을 뒤로 당겨서 닫는다.");
		
	}

}



인터페이스를 사용한 미닫이 문 클래스 입니다.

public class SlideDoor2 implements IDoor{
	
	@Override
	public void closeDoor() {
		// TODO Auto-generated method stub
		System.out.println("문을 옆으로 밀어서 연다.");
	}
	@Override
	public void openDoor() {
		// TODO Auto-generated method stub
		System.out.println("문을 옆으로 밀어서 닫는다.");
		
	}
	
}



인터페이스를 사용한 회전문 클래스 입니다.

public class RevolvingDoor implements IDoor {
	
	
	@Override
	public void openDoor() {
		// TODO Auto-generated method stub
		System.out.println("문을 회전하여 연다.");

	}
	

	@Override
	public void closeDoor() {
		// TODO Auto-generated method stub
		System.out.println("문을 회전하여 닫는다.");

	}

}



House2 클래스 입니다.

public class House2 {

	IDoor iDoor;

	public House2(IDoor idoor) {
		this.iDoor = idoor;
	}

	public void in() {
		iDoor.openDoor();
		System.out.println("집에 들어감");
	}

	public void out() {
		System.out.println("집에서 나옴");
		iDoor.closeDoor();
	}

}



메인 클래스 입니다.

public class ExampleInterface{
	
	// 회전문 : RevolvingDoor
	public static void main(String[] args) {
		House2 slideHouse = new House2(new SlideDoor2());; // 미닫이 문을 가진 집 
		House2 hingedHouse = new House2(new HingedDoor2());// 여닫이 문을 가진 집
		House2 revolvingHouse = new House2(new RevolvingDoor());
		
		slideHouse.in();
		slideHouse.out();
		System.out.println();
		
		hingedHouse.in();
		hingedHouse.out();
		
		System.out.println();
		revolvingHouse.in();
		revolvingHouse.out();
		
	}
}


반응형
LIST
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함