남극
객체지향 패턴 (Java) 본문
Object-Oriented
객체 지향은 3가지 특성을 가지고 있습니다.
상속성
은닉성
추상화
추상화는 상속 성과 은닉성의 특징을 전제로 존재하고 할 수 있습니다. 이 추상화를 알아야 객체 지향의 특성을 정확히 이해할 수 있습니다.
overload (중복된 메서드 정의)
오버로드를 정의하자면 이렇습니다. 하나의 클래스 안에서 같은 이름의 메서드가 선언되었으나 변수의 개수나 변수의 타입이 다른 경우를 뜻합니다.
public class exam1{
private void test(){}
private void test(int a, int b){}
}
이름은 같지만 메게 변수의 수가 다른 것을 보실 수 있습니다.
overwrite (메서드 재정의)
오버라이트 직역하면 덮어씌우기입니다. 직역과 비슷하게 메서드를 재정의하는 방법입니다.
public class Playing {
public abstract void run();
}
이 예제는 에러가 납니다. Playing 클래스를 abstract로 바꾸라는 에러이죠. 추상화라는 개념은 구현되지 않은 상태를 뜻하기에 이 클래스를 사용할 때 구현하지 않으면 똑같이 추상 클래스가 되어버립니다.
public abstract class Playing {
public abstract void run();
}
사용 클래스
public class TT {
public static void main(String[] args) {
Playing a = new Playing();
}
}
이렇게 사용할 시 인스턴스 하는 부분에서 이러한 에러가 납니다.
"Cannot instantiate the type Playing" 이 말인즉 인스턴스를 할 수 없다는 이야기죠.
추상 클래스의 사용 조건
구현 부가 없을 때
추상 메서드를 가진 클래스는 추상 클래스로 선언
추상화된 속성은 상속이 된다(속성: 객체, 요소 또는 파일의 성질을 의미)
추상 클래스로는 객체 생성이 불가능하다.
이렇게 네 가지를 가지고 있습니다. 이러한 특성을 가진 추상 클래스와 비슷한 개념을 가진 개념이 있습니다.
Interface
인터페이스는 추상화와 비슷한 개념을 가집니다. 사실상 또 다른 하나의 추상화입니다. 자바는 클래스는 하나만 상속받아야 하는 단일 상속이라는 특성을 가지고 있습니다. 그렇기에 2개 이상의 추상 클래스를 사용해야 한다면 어떻게 해야 할까요. 이러한 문제는 인터페이스로 해결할 수 있습니다. 이 인터페이스 안에는 추상 메서드만이 존재합니다.
interface Test test(){
public void run();
}
이러한 형식으로 사용할 수 있고 사용을 하려면 implements라는 메서드를 사용하여 호출해야 합니다. 추상 클래스와 같이 구현부를 구현하지 않으면 추상 클래스가 되어버리는 현상이 일어납니다(에러).
public class UseTest implements test{
public void run(){
~~~~
}
}
어떨 때 사용할까?
위에서 알아본 인터페이스와 추상 클래스의 공통점은 추상 메서드를 가지고 있다는 것이었습니다. 이 추상 메서드는 무엇을 위해 쓰는지 알아보도록 합시다. 일반적으로는 이런 뜻으로 쓰입니다. 상속을 받은 클래스에서는 반드시 써야 한다는 경고라고 저는 알고 있습니다. 이 클래스를 상속받으려면 추상 메서드를 구현해야 한다는 것이죠. 인터페이스 또한 마찬가지입니다. 예를 들어 설명하자면 한국인인 개발자와 미국인인 개발자 둘이 만나서 개발을 합니다. 한국인 개발자가 DB를 구현을 합니다. 미국인 개발자는 DB를 사용하는 로직을 개발해야 하죠. 그런데 서로가 서로의 나라의 말을 하나도 못 합니다. 전혀 알아듣지 못하죠. 그럴 때 한국인 개발자가 미국인 개발자에게 이 메서드는 꼭 구현해야 한다고 경고를 주는 것입니다. 이렇게 하면 꼭 필요한 것들을 구현할 수 있게 됩니다.
결국 객체 지향이란
많은 장점을 가지고 있음은 분명합니다. 재사용성, 확장성, 유지 보수 등의 편리성을 가지고 있기 때문입니다. 그렇지만 이렇게나 좋은 점들을 사용하기에는 설계부터 개발까지 정확하지 못하면 재사용이 아니라 다른 메서드가 되어버릴 수도 있기 때문입니다. 결국에는 이 패턴을 공부하고 연습하여 설계 단계부터 모든 것을 정확히 하여 개발에 있어서 큰 이점을 가져갈 수 있습니다. 이 가운데 정말 중요한 추상화라는 개념은 알고 있으면 정말 도움이 되는 개념이라고 생각합니다.
'JAVA > Design Pattern' 카테고리의 다른 글
Factory Method (Java) (0) | 2020.02.20 |
---|---|
Design MVC (Java) (0) | 2020.02.19 |