추상클래스 인터페이스

:

추상클래스는 추상메소드를 1개이상 가진 클래스로 이미 구현된 메소드가 있을수도 있다.


인터페이스는 일종의 명세서로 내부의 모든 메소드가 구현되지않고 선언만 되있다. 


눈에 보이는 차이로는 추상클래스는 extend를 통해 1개만을 상속받을수있고 인터페이스는 implement를 통해 여러개 확장받을수 있다. 


또한 인터페이스는 일종의 가이드 라인으로 확장을 받는 서브클래스들이 대략적으로 어떤 구조와 기능을 가진지 알수있는 역할을 한다.



인터페이스와 추상클래스의 차이


추상클래스(abstract class)?

추상클래스란 추상메소드를   이상 포함하고있는 클래스로써객체화할  없는 클래스이다추상 메소드랑 메소드명과 자료형매개변수만이 정해져있고 내용이  비어있는 메소드로써 오버라이딩을 통해 내용을 채워 재정의를 해야 사용할  있다추상클래스나 추상메소드를 선언하기 위해서는 이름 앞에 abstract이라는 키워드를 추가하면 된다.

추상클래스 구현 예제

public class Test {

public static void main(String[] args) { // 메인 클래스내의 메인 메소드

Rectangle r = new Rectangle(); // 서브클래스 객체생성

Circle c = new Circle(); // 서브클래스 객체생성

r.draw(); // 서브클래스의 상속받은 메소드 호출

c.draw(); // 서브클래스의 상속받은 메소드 호출

}

}

abstract class Shape { // 추상클래스 (슈퍼클래스)

int x, y;

public void move(int x, int y){

this.x=x;

this.y=y;

}

public abstract void draw(); // 추상메소드

}

class Rectangle extends Shape { // 서브클래스

int width,height;

public void draw() { // 추상메소드 재정의

System.out.println("사각형 그리기 메소드");

}

}

class Circle extends Shape { // 서브클래스

int radius;

public void draw() { // 추상메소드 재정의

System.out.println("원그리기메소드");

}

}

추상클래스는 슈퍼클래스의 용도로 사용되며 일반 메소드를 가질  있다추상클래스를 상속받는다면 반드시 추상클래스의 추상메소드를 재정의하여 구현하여야한다.


인터페이스란? (Interface)

추상메소드(내용이없는 메소드) 상수로만 이루어진 클래스이다인터페이스 내에 메소드는 모두 추상메소드이기 때문에 abstract 붙이지 않는다. interface 인터페이스명{ } 형태로 구현하며 인터페이스를 사용하는 클래스들은 implement 사용해야한다

인터페이스 구현 예제

public class Test {

public static void main(String[] args) { // 메인 클래스내의 메인 메소드

/* 각클래스별로 객체생성 */

Television tv = new Television();

Refrigerator r = new Refrigerator();

/* 상속받은 메소드 호출 */

tv.turnOn();

r.turnOn();

tv.turnOff();

r.turnOff();

}

}

interface RemoteControl { // 인터페이스

public void turnOff(); // 메소드선언

public void turnOn(); // 메소드선언

}

class Television implements RemoteControl {

/* 상속받은 메소드 재정의 */

public void turnOff() {System.out.println("TV 끔니다.");}

public void turnOn() {System.out.println("TV 켭니다.");}

}

class Refrigerator implements RemoteControl {

/* 상속받은 메소드 재정의 */

public void turnOff() {System.out.println("냉장고를 끔니다.");}

public void turnOn() {System.out.println("냉장고를 켭니다.");}

}


인터페이스는 모든 메소드가 추상메소드이므로 구현(인터페이스는 상속이 아닌 구현이라 표현) 클래스들에서 재정의가 이루어져야한다이는 코드의 중복이 일어나 단점이 되기도 한다.


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


추상클래스

인터페이스

공통점

- 모두 클래스임

- 하위클래스에서 모든 추상메서드를 구현해야 

차이점

- 멤버변수와 일반 메서드를 가질  있다.

extends 사용

- 작업의 레벨 분할을 위해서 사용

- 단일 상속

- 추상메서드와 static final 변수만 사용가능

- Implements 사용

- 중복 구현 가능

- 공동 작업을 위한 상호간의 인터페이스를 위해 사용

- 다중 상속 가능

 

 인터페이스와 추상클래스의 사용에 있어서 가장  차이점은 다중상속 여부이다자바는 다중상속을 할수없는데 인터페이스는 다중구현으로 가능하다이에 대한 자세한 예시는 다음과 같다.



오리 기어다닐수도헤엄칠수도 있다 



 위의 그림은 다중상속을 하지 않고 추상클래스로 구현될  생기는 문제이다다음과 같이 중복을 제거하기위해 추상클래스로 상속을 이용하여 구현할  오리는 육상동물과 수중동물 클래스 2가지의 메소드를 동시에 가져야한다하지만 다중상속은 불가능하므로 애완동물을 상속받는 수륙동물클래스를 추가해야한다하지만 이는 처음에 중복을 피하고자  의도에서 벗어나며 상속을 최소화해야 하는 좋은 프로그래밍의 방법에도 벗어난다.



인터페이스의 다중상속을 이용한 구현


 반면 인터페이스는 다중 상속이 가능하므로 위의 그림처럼 간결한 설계를   있다상속의 단계를 줄였고 앞으로 추가적인 다중상속이 필요할시 상속의 단계를 늘일 필요가 없다.


'Develop > Java' 카테고리의 다른 글

자바 reflection  (0) 2016.11.17
문자열 "ABCDEFG"를 역순으로 출력  (0) 2016.11.17
JAVA의 접근제한자  (0) 2016.11.15
오버로딩 vs 오버라이딩  (0) 2016.11.14
Java Collection Framework  (0) 2016.11.14

http 메소드 정리


  - Get : URI(URL)가 가진 정보를 검색하기 위해 서버 측에 요청하는형태


  - post : 요청 URI(URL)에 폼 입력을 처리하기 위해 구성한 서버 측 스크립트(ASP, PHP, JSP 등) 혹은 CGI 프로그램으로 구성되고 Form Action과 함께 전송되는데, 이때 헤더 정보에 포함되지 않고 데이터 부분에 요청 정보가 들어가게 됨


  - Head : GET과 유사한 방식이나 웹 서버에서 헤더 정보 이외에는 어떤 데이터도 보내지 않음


  - Option : 해당 메소드를 통해 시스템에서 지원되는 메소드 종류를 확인할 수 있음


  - Put : POST와 유사한 전송 구조를 가지기 때문에 헤더 이외에 메시지(데이터)가 함께 전송된다. 원격지 서버에 지정한 콘텐츠를 저장하기 위해 사용되며 홈페이지 변조에 많이 악용되고 있다.


  - Delete : 원격지 웹 서버에 파일을 삭제하기 위해 사용되며 PUT과는 반대 개념의 메소드 


  - Trace : 원격지 서버에 Loopback(루프백) 메시지를 호출하기 위해 사용


  - Connect :  웹 서버에 프락시 기능을 요청할 때 사용



'Develop > Web' 카테고리의 다른 글

Web server vs WAS  (0) 2016.12.20
서비스 port 리스트  (0) 2016.11.16
[HTML 속성] id와 name 속성의 차이  (0) 2016.11.03

+ Recent posts