Notice
Recent Posts
Recent Comments
Link
- Arawn's Dev Blog
- Outsider's Dev Story
- Toby's Epril
- Benelog
- NHN 개발자 블로그
- SK 플래닛 기술 블로그
- OLC CENTER
- 소프트웨어 경영/공학 블로그
- 모바일 컨버전스
- KOSR - Korea Operating System …
- 넥스트리 블로그
- 리버스코어 ReverseCore
- SLiPP
- 개발자를 위하여... (Nextree 임병인 수석)
- "트위터 부트스트랩: 디자이너도 놀라워할 매끈하고 직관…
- Learning English - The English…
- real-english.com
- 'DataScience/Deep Learning' 카테…
- Deep Learning Summer School, M…
- Deep Learning Courses
민서네집
Interface로 다중상속을 대체할 수 있음을 보여주는 예제 본문
Java 에서는 다중 상속이 허용되지 않고, 단일 상속만 허용되지만 인터페이스로 다중 상속의 기능을 대신할 수 있다고 한다. 어떤 경우에 그렇게 사용할 수 있는지 소스로 표현해 봤다.
아래와 같이 어떤 Framework를 만들고, 실행되는 실제 동작은 프로그래머마다 필요에 따라 다르게 적용하고 싶은 경우, 외부에 제공하는 껍데기 역할을 하는 추상 클래스를 만들어서 상속받아서 만들어도 되고, 인터페이스를 구현해서 만들어도 된다. 이 두 가지는 똑같은 역할을 하기 때문에 이런 경우 상속을 인터페이스로 대체할 수 있다.
프로그램 설계를 이와 같이 하면 상속을 받아서 오버라이딩(Overriding) 하지 않고, 인터페이스를 구현(Implements) 하는 것으로 해서 동일한 역할을 할 수 있다.
package framework; public class Framework { private int a = 10; private int b = 5; // 인터페이스를 이용하는 경우 public void print(CalculatorInterface calcInterface) { System.out.println(calcInterface.calculate(a, b)); } // 상속을 이용하는 경우 public void print(BaseCalculator baseCalculator) { System.out.println(baseCalculator.calculate(a, b)); } } package framework; public interface CalculatorInterface { public int calculate(int a, int b); } package framework; public abstract class BaseCalculator { abstract public int calculate(int a, int b); }
package application; import framework.BaseCalculator; import framework.CalculatorInterface; import framework.Framework; public class App { public static void main(String[] args) { Framework framework = new Framework(); // Interface 이용 CalculatorInterface calcInterface = new MulitiplyCalculator(); framework.print(calcInterface); // 상속을 이용 BaseCalculator baseCalculator = new MulitiplyCalculator2(); framework.print(baseCalculator); } } package application; import framework.CalculatorInterface; public class MulitiplyCalculator implements CalculatorInterface { @Override public int calculate(int a, int b) { return a * b; } } package application; import framework.BaseCalculator; public class MulitiplyCalculator2 extends BaseCalculator { @Override public int calculate(int a, int b) { return a * b; } }
'Java' 카테고리의 다른 글
Tomcat Clustering (1) | 2015.02.04 |
---|---|
상속 대신 Composition 으로 다른 객체의 기능 사용하는 예제 (0) | 2015.01.07 |
log 내용을 DB에 저장하기 (1) | 2014.12.17 |
코딩으로 log4j 설정 파일 읽어들여 설정 바꾸기 (PropertyConfigurator 이용) (0) | 2014.12.11 |
Tomcat 7 서버 - hotdeploy 시 memory leak 방지 (0) | 2014.10.10 |
Comments