개발 일지/Java

[Java] 추상화(Abstraction)

미숫가루설탕많이 2022. 12. 30. 14:13

 추상화의 사전적 의미는 '사물이나 표상을 어떤 성질, 공통성, 본질에 착안하여 그것을 추출하여 파악하는 것'이다. 여기서 핵심적인 개념은 '공통성과 본질을 모아 추출하는 것'이다.

 

 자바 프로그래밍에서의 추상화는 객체의 공통적인 속성과 기능을 추출하여 정의하는 것을 의미한다.

 

 상속이 하위 클래스를 정의하는 데 상위 클래스를 사용하는 것이라고 한다면 추상화는 기존 클래스들의 공통적인 요소들을 뽑아서 상위 클래스를 만들어 내는 것이다.

 

 예를 들어, 강아지나 고양이 등의 애완동물은 먹기, 걷기 등의 행동을 하기 때문에 '애완동물'이라는 추상 클래스를 만들 수 있다. 이렇게 공통적인 속성과 기능을 모아서 정의해주면 코드의 중복을 줄일 수 있고, 보다 효과적으로 클래스 간의 관계를 설정할 수 있으며 유지 보수가 용이해진다.

 

 자바 프로그래밍에서는 주로 추상 클래스와 인터페이스라는 문법 요소를 사용해서 추상화를 구현한다. 

 

 

 

 

추상 클래스(abstract class)


 추상 클래스란, 하나 이상의 추상 메서드를 포함한 클래스를 말한다. 이때, 추상 메서드는 함수 선언만 되어있고 구현부가 없는 아래와 같은 메서드이다.

 

public abstract class 클래스명();

 

 추상 클래스는 메서드 시그니처만 존재하고 바디가 선언되어있지 않은 추상 메서드를 포함하는 '미완성 설계도'라고 할 수 있다. 그렇게 때문에 이를 기반으로 객체를 생성하는 것이 불가능하다.

 

 객체도 생성하지 못하는 미완성 클래스를 만드는 이유는 크게 두 가지가 있다.

 

  1. 추상 클래스는 상속 관계에 있어 새로운 클래스를 작성하는 데 매우 유용하다.

     메서드의 내용이 상속받는 클래스에 따라 종종 달라지기 때문에 상위 클래스에서는 선언부만 작성하고 실제 구체적인 내용은 상속받는 하위 클래스에서 구현하도록 비워둔다면 설계하는 상황이 변하더라도 보다 유연하게 대응할 수 있다.

  2. 추상 클래스는 자바 객체 지향 프로그래밍의 추상화를 구현하는 데 핵심적인 역할을 수행한다.

 

 여러 사람이 함께 개발하는 경우, 공통된 속성과 기능임에도 불구하고 각각 다른 변수와 메서드로 정의되는 경우 발생할 수 있는 오류를 미연에 방지할 수 있다. 결론적으로 추상화는 상속계층도의 상층부에 위치할 수록 추상화의 정도가 높고 그 아래로 내려갈수록 구체화된다고 정리할 수 있다. 즉, 상층부에 가까울수록 더 공통적인 속성과 기능들이 정의되어 있다는 것이다.

 

 

 

 

abstract 제어자


abstract는 사전적으로 '추상의, 미완성의'라는 의미를 가지고 있다. 이 제어자는 메서드의 선언부만 작성하고 실제 수행내용은 구현하지 않은 추상메서드를 선언하는 데 사용한다.

 

 클래스에 사용하면 클래스 내에 추상 메서드가 선언되어 있음을 의미하고 메서드에서는 선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 알린다.

 

abstract class AbstractTest{ // 추상 메서드를 포함한 클래스
	abstract void walk(); // 구현부가 없는 메서드
}

 

'개발 일지 > Java' 카테고리의 다른 글

[Java] 인터페이스(Interface)  (0) 2023.01.02
[Java] final 키워드  (0) 2023.01.02
[Java] instanceof 연산자  (0) 2022.12.30
[Java] 참조 변수의 타입 변환  (0) 2022.12.30
[Java] 다형성(Polymorphis)  (0) 2022.12.30