[JAVA]인터페이스의 사용법

2012. 11. 6. 11:52개발관련기록/Java

반응형





인터페이스를 사용하면서 얼마나 큰 이식성과 확장성이 있을까에 대해 항상 의문이 있었다.


인터페이스의 사용방법은 Implements로 Interface의 선언만 되어진 함수에 대해 정의를 하고


정의가 되어진 Implements(구현)를 포함하는 Class를 객체화 시켜 사용을 한다.


자 여기까진 어느정도 이해가 되었지만 정확하게 어떻게 사용하면 이점이 있는지에 대해서는

소스를 살펴 보면서 이해해 보도록 하자.


간략히 이점만 말하겠다.


main3.java에서 사용된 부분에서 객체화 시킨 클래스는 

implements를 한 PrintNameCard3impl 의 객체를 만들어 사용해도 같은 

PrintNameCard3  Type으로 간주한다.


다시 말해서 NameCard라는 클래스를 수정할 필요 없이 사용할때마다 Implements 시킨 클래스를 추가 또는 수정하여 확장성을 넓혀 갈수 있다.


자세한 설명은 http://dante2k.egloos.com/199169 이 블로그에 소개 되어 있으니 참고 바란다.




MAIN3.java

package com.wook.test3;
public class main3 {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		NameCard3 nc = new NameCard3();
		nc.name = "이름은 이욱진입니다";
		nc.email = "wookjin1.lee@doosan.com";
		PrintNameCard3impl p = new PrintNameCard3impl();
		nc.setPrintName(p);
		nc.print();
		
		System.out.println("------------다음-------------");
		PrintNameCard31impl p1 = new PrintNameCard31impl();
		nc.setPrintName(p1);
		nc.print();
		
	}

}



NameCard3 .java


package com.wook.test3;

public class NameCard3 {
	String name;
	String email;
	PrintNameCard3 pnc;
	
	public void setPrintName(PrintNameCard3 p){
		this.pnc = p;
	}
	
	public void print(){
		pnc.print(this);
	}
} 

PrintNameCard3 .java

package com.wook.test3;

interface PrintNameCard3 {
	public void print(NameCard3 nc);
}



PrintNameCard31impl .java

package com.wook.test3;

public class PrintNameCard31impl implements PrintNameCard3{

	@Override
	public void print(NameCard3 nc) {
		// TODO Auto-generated method stub
		System.out.println("이름 : " +nc.name);
		System.out.println("이멜 : " + nc.email);
	}
	
} 

PrintNameCard3impl .java

package com.wook.test3;

public class PrintNameCard3impl implements PrintNameCard3{

	@Override
	public void print(NameCard3 nc) {
		// TODO Auto-generated method stub
		System.out.println("이름 : "+nc.name);
	}
	
}



반응형