추상화(Abstraction)
컴퓨터 프로그래밍에서의 추상화란 복잡한 소프트웨어 시스템을 효율적으로 설계하고 구현할 수 있는 방법을 의미한다.
추상 클래스
추상 클래스는 미완성 메서드를 갖고 있는 클래스를 의미한다.
추상 메서드를 가지고 있으면 해당 클래스는 추상 클래스가 된다.
상속을 통해 추상 메서드를 완성해야 인스턴스를 생성할 수 있다.
인스턴스를 생성한다는 것은 해당 인스턴스가 가지고 있는 기능을 사용한다는 것인데 추상 메서드는 미완성 메서드이기 때문에 해당 기능을 구현하지 않으면 사용할 수 없다. 따라서 상속을 통해서 추상 메서드를 구현하고 인스턴스를 생성해야된다.
추상 클래스의 작성
여러 클래스에 공통적으로 사용될 수 있는 추상 클래스를 바로 작성하거나 기존 클래스의 공통 부분을 뽑아서 추상 클래스를 만든다.
요리사가 레시피를 통해서 2가지 요리를 만든다고 가정해보자
2가지 요리를 만들 때 공통적으로 하는 일(재료 손질, 물 끓이기 등)이 발생하는데 그것을 추상화시키면 된다.
해당 예제와 같이 요리를 하는데 채소를 씻는 것이 공통적으로 필요한 부분이라고 가정하면 추상 메서드를 만들어 해당 클래스를 추상 클래스로 만든다.
타입을 최고 부모인 Object로 변경하면 에러가 발생한다. 그 이유는 washVegetable() 메서드는 Object에서 구현되지 않기 때문이다.
추상 클래스의 장점
그렇다면 왜 굳이 추상 클래스를 만들어서 사용하는 것일까?
3가지 종류의 노트북이 있는데 CPU만 다 다르다고 가정해보자.
추상 클래스를 사용하지 않으면 해당 노트북은 CPU가 다르기 때문에 각 노트북마다 클래스를 작성해줘야 한다.
추상 클래스를 사용하여 위의 사진과 같이 공통된 부분을 추상클래스로 만들고 해당 클래스를 상속받아 다른 부분만 추가해준다. 이것을 통해 중복을 제거하여 코드를 작성하기 쉽게 만들 수 있다는 장점이 있다.
또 다른 장점으로 코드의 변경이 이루어질 때 하나만 바꾸면 되기 때문에 관리가 용이해진다는 점이다.
메모리를 8G 메모리로 바꾼다고 가정하면 추상 클래스의 변화로 해당 클래스를 상속받는 자손 클래스도 다 변경이 가능하다.
마지막으로 추상 클래스를 의미 있는 단계별로 만들어 놓으면 내가 원하는 곳에서 변경할 수 있다.
노트북의 추상화 클래스를 3단계로 작성했다.
중간에 S사 노트북에서 배터리를 다른 것으로 교체하고 싶드면 2단계에 있는 추상 클래스를 상속받아 구현하면 된다.
추상화된 코드는 구체화된 코드보다 유연해서 변경에 유리하다.
추상 메서드
미완성 메서드 즉, 구현부가 없는 메서드를 의미한다.
꼭 필요한 메서드지만 자손마다 다르게 구현될 것으로 예상되는 경우 추상 메서드를 사용한다.
추상 메서드가 주어지면 다 구현해야되고 일부만 구현할 시 추상 클래스를 유지해야 한다.
추상 메서드 호출 가능??
메서드는 선언부만 알고 있어도 호출할 수 있다. (상속을 통해 자손이 완성될 수 있기 때문에)
다형성도 가능하다. (메서드가 구현되었기 때문에)
'자바' 카테고리의 다른 글
Java - 연산자 (0) | 2023.11.02 |
---|---|
Java - 변수 (1) | 2023.11.01 |
객체 지향 프로그래밍 - 인터페이스 (0) | 2023.08.18 |
객체 지향 프로그래밍 - 다형성 (0) | 2023.08.17 |
객체 지향 프로그래밍 - 제어자 (0) | 2023.08.16 |