2008년 09월 08일
abstract수정자와 interface의 차이는 무엇인가여?
출저 : 네이버 지식~~
용어에서 알 수 있듯이, 한쪽은 class이고, 다른 한쪽은 interface 입니다. class와 interface의 역할은 분명히 나뉘어져 있죠.
일반적으로, class는 초기화 되어서 생성될 수 있습니다. 그러나, abstract class는 초기화 되어서 생성될 수 없는 class 입니다. class의 성질을 모두 가지면서 이러한 성질 하나의 차이로 abstract 와 concrete class 로 나뉘게 됩니다. 그럼, abstract class는 왜 필요할까요? abstract class는 그 자체로 불완전하기 때문에 다른 class가 이 abstract class를 상속받아야 합니다. 즉, 이 abstract class는 개발자가 구현시에 반드시 이 class를 상속받고자 하기 원할 때에 사용할 수 있습니다. 이러한 것을 '설계 의도' 라고도 얘기를 하죠. javax.servlet.http.HttpServlet을 예를 들면, 개발자가 서블릿을 구현하려면 반드시 HttpServlet이라는 abstract class를 상속받아서 구현해주어야 합니다. (물론, 다른 방법도 있긴 하지만 설명을 간단하기 위해서 일반적으로 사용하는 방법을 설명드립니다.) 이것은 다시 말하면, 서블릿을 개발하는데 기본적인 API를 제공하는 java 진영에서는 이 HttpServlet을 개발자가 반드시 구현해주어서 웹으로 서비스를 해주기를 원한다는 얘기죠. 개발자가 HttpServlet 상위의 모든 부분을 구현해주어서 별도의 서블릿을 만들어도 상관없지만, 기타 공통으로 사용되는 부분들은 상위의 클래스 (HttpServlet 상위의 클래스)로 모두 옮겨놓고, 단지 개발자는 service 메소드만 구현하도록 만든거죠.
interface 라는 것은 타입(type) 또는 역할(role)이라는 관점에서 보셔야 할 겁니다. class와 interface의 차이 중에 하나가 단일 상속과 다중 상속입니다. interface는 다중 상속이 가능합니다. 또한, interface는 abstract 클래스와 마찬가지로 직접적으로 초기화할 수 없습니다. interface가 실제 구현상에서 사용되는 예들은 다형성(polymorphism)일 것입니다. 이것은 interface가 하는 역할이 해당 객체에 대한 타입(type) 또는 역할(role)을 규정짓는데 사용된다는 것을 의미합니다. 다시 말하면, interface는 해당 객체에 대한 행동 규약을 미리 정해놓는다고 생각하시면 됩니다. 이렇게 구현된 객체는 외부에서 바라볼때에 구체적으로 구현된 클래스를 바라보는 것이 아니라, interface를 바라보면 그 interface를 구현한 클래스가 어떤 기능을 하는지 알 수 있습니다. 또한, 같은 행동이라 하더라도 실제로 필요에 따라서는 그 구체적인 구현이 달라질 수 있으며 시간이 지나면서 구현 자체가 다른 방식으로 변경될 수 있습니다. 이러한 경우, 외부에서 바라보는 객체는 interface만을 바로보았기 때문에 그 변경에 대한 영향을 최소한으로 줄일 수 있는 장점이 있습니다. 사실, interface는 객체지향 개발, Component-based 개발에서 중요한 요소로 사용되는 역할을 합니다.
용어에서 알 수 있듯이, 한쪽은 class이고, 다른 한쪽은 interface 입니다. class와 interface의 역할은 분명히 나뉘어져 있죠.
일반적으로, class는 초기화 되어서 생성될 수 있습니다. 그러나, abstract class는 초기화 되어서 생성될 수 없는 class 입니다. class의 성질을 모두 가지면서 이러한 성질 하나의 차이로 abstract 와 concrete class 로 나뉘게 됩니다. 그럼, abstract class는 왜 필요할까요? abstract class는 그 자체로 불완전하기 때문에 다른 class가 이 abstract class를 상속받아야 합니다. 즉, 이 abstract class는 개발자가 구현시에 반드시 이 class를 상속받고자 하기 원할 때에 사용할 수 있습니다. 이러한 것을 '설계 의도' 라고도 얘기를 하죠. javax.servlet.http.HttpServlet을 예를 들면, 개발자가 서블릿을 구현하려면 반드시 HttpServlet이라는 abstract class를 상속받아서 구현해주어야 합니다. (물론, 다른 방법도 있긴 하지만 설명을 간단하기 위해서 일반적으로 사용하는 방법을 설명드립니다.) 이것은 다시 말하면, 서블릿을 개발하는데 기본적인 API를 제공하는 java 진영에서는 이 HttpServlet을 개발자가 반드시 구현해주어서 웹으로 서비스를 해주기를 원한다는 얘기죠. 개발자가 HttpServlet 상위의 모든 부분을 구현해주어서 별도의 서블릿을 만들어도 상관없지만, 기타 공통으로 사용되는 부분들은 상위의 클래스 (HttpServlet 상위의 클래스)로 모두 옮겨놓고, 단지 개발자는 service 메소드만 구현하도록 만든거죠.
interface 라는 것은 타입(type) 또는 역할(role)이라는 관점에서 보셔야 할 겁니다. class와 interface의 차이 중에 하나가 단일 상속과 다중 상속입니다. interface는 다중 상속이 가능합니다. 또한, interface는 abstract 클래스와 마찬가지로 직접적으로 초기화할 수 없습니다. interface가 실제 구현상에서 사용되는 예들은 다형성(polymorphism)일 것입니다. 이것은 interface가 하는 역할이 해당 객체에 대한 타입(type) 또는 역할(role)을 규정짓는데 사용된다는 것을 의미합니다. 다시 말하면, interface는 해당 객체에 대한 행동 규약을 미리 정해놓는다고 생각하시면 됩니다. 이렇게 구현된 객체는 외부에서 바라볼때에 구체적으로 구현된 클래스를 바라보는 것이 아니라, interface를 바라보면 그 interface를 구현한 클래스가 어떤 기능을 하는지 알 수 있습니다. 또한, 같은 행동이라 하더라도 실제로 필요에 따라서는 그 구체적인 구현이 달라질 수 있으며 시간이 지나면서 구현 자체가 다른 방식으로 변경될 수 있습니다. 이러한 경우, 외부에서 바라보는 객체는 interface만을 바로보았기 때문에 그 변경에 대한 영향을 최소한으로 줄일 수 있는 장점이 있습니다. 사실, interface는 객체지향 개발, Component-based 개발에서 중요한 요소로 사용되는 역할을 합니다.
이 글과 관련있는 글을 자동검색한 결과입니다 [?]
- [week 2 예습] 02. 객체지향 개념 by 백승수
- 간만에 C# 퀴즈 힌트 by monaca
- interface의 의미, abstract class vs interface by monaca
- 예습 by 조커
- Java 2장 객체지향개념 예습! by 굴레방
# by | 2008/09/08 17:06 | JAVA | 트랙백 | 덧글(0)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]