본문 바로가기

Java & JSP

[Java] 추상화 관련 정리

728x90
반응형

메소드 재정의 (Method Overriding)

부모 클래스(인터페이스)를 상속받아 재정의 하는 것을 말한다.


추상 클래스와 추상 메서드

// 추상 클래스

public abstract class Shape {  // 추상 메서드를 1개라도 포함하는 클래스

public abstract void draw(); // 추상 클래스. 구현부 X

public string name; // 일반 변수

public void move(){ ... } // 일반 함수. 구현부 O

}

- 구체적인 구현부가 없이 abstract 를 붙여 선언만 되어 있는 메서드를 추상 메서드라고 한다.

- 이러한 추상메서드를 1개라도 가지고 있을 경우 '추상 클래스' 라고 하며 abstract 를 붙여주어야 한다.


public class Triangle extends Shape {

public void draw() { // Shape에서 상속받은 메소드 구현 (Overriding)

System.out.println("Triangle Draw");

}

}


public class Rectangle extends Shape {

public void draw() { // Shape에서 상속받은 메소드 구현 (Overriding)

System.out.println("Rectangle Draw");

}

}

Shape s = new Shape(); (X)


Triangle t = new Triangle(); (O)

Triangle r = new Rectangle(); (O)


Shape t = new Triangle(); (O)

Shape r = new Rectangle(); (O)


Triangle t = new shape(); (X)

Rectangle r = new shape(); (X)


public static void call (Shape s) {

s.draw();

}


// 다형성의 특징 - Heterogeneous Collection

Shape []s = new Shape[2];

s[0] = new Triangle();

s[1] = new Rectangle();

- 추상클래스는 그 자체로 객체화될 수 없다. 따라서 Shape는 추상클래스이기 때문에 인스턴스를 생성할 수 없다.

- 다른 클래스가 추상클래스를 상속받을 경우 반드시 추상메서드를 오버라이딩(재정의)해야 한다.

  Triangle 클래스는 Shape(추상클래스)를 상속받아 추상메서드(draw())를 재정의한다.

- 부모를 상속받은 객체들은 부모인 추상 클래스의 형을 사용할 수 있다.

  덕분에 call함수를 Triangle, Rectangle 등의 매개변수를 갖도록 계속 재정의하지 않아도 된다.

- 추상화 덕분에 다형성의 특징을 이용할 수 있어서 추상 클래스 형 배열에 상속받은 클래스의 객체들을 담을 수 있다.


인터페이스

추상클래스는 단일상속만 가능하다. 이미 다른 클래스를 상속받아 추상 클래스를 상속시킬 방법이 없을 경우 해결하기 위한 것이 인터페이스이다.


public Interface DatabaseFactory {

public Database getDatabase();

}


public class DatabaseFactoryImpl implements DatabaseFactory {

public Database getDatabase(){

Database db = new DatabaseImpl();

return db;

}

}

- 인터페이스는 추상메서드만(!) 가지고 있는다.

- 추상메서드는 abstract 키워드를 가지고 있지 않다.

- 추상클래스와 마찬가지로 상속받아 추상메서드의 재정의를 꼭 해야한다.

- 인터페이스를 받아들이는 클래스의 입장

 1) 인터페이스에 선언된 추상 메소드를 있는 그대로 상속받아 추상 클래스가 된다.

 2) 인터페이스에 선언된 추상 메소드를 재정의하여 객체를 생성할 수 있는 구현 가능한 클래스로 만든다.


이러한 점에서 보면 인터페이스가 추상클래스와 비슷해보여도 좀 더 넓은 범위라고 생각할 수 있다.



추상 클래스와 인터페이스를 정리해보자면 다음과 같다.


 

 추상 클래스

인터페이스 

가질 수 있는 있는 속성

 추상 메소드, 일반 함수, 일반 변수 ..

 추상 메소드

상속 받을 수 있는 개수 

1개 

 여러 개

상속 시 재정의 필수 여부

필수

필수 

 키워드

abstract / extends 

 interface / implements



728x90
반응형