728x90
반응형
추상화의 개념
- 추상화란 불필요한 정보를 숨기고 중요한 정보만을 나타내는 것을 의미.
- 추상화를 이용하면 어떤 영역에서 필요한 공통의 속성이나 행동을 추출함으로써 효율적인 코드를 작성할 수 있음.
추상화의 장점
- 객체 간의 복잡성이 줄어듦.
- 코드의 중복을 막고 재사용성을 높일 수 있음.
- 사용자에게 중요한 세부 정보만 제공하므로 응용 프로그램이나 프로그램의 보안에 도움이 됨.
추상화의 유형
- 데이터 추상화
- 주로 복잡한 자료형을 만들고 구현을 숨기는 것으로, 구현의 세부 사항으로 이동하지 않고 데이터 유형을 조작하는 작업만 노출.
- 제어 추상화
- 작업의 단위 정의를 만들고 필요할 때마다 재사용하는 것으로, 반복되는 모든 코드를 수집하고 이를 하나의 단위로 노출.
추상화 구현 방법
- 추상화는 추상 클래스 또는 인터페이스를 통해 구현할 수 있음.
추상 클래스 | 인터페이스 |
한 번에 하나의 클래스 또는 추상 클래스만 상속할 수 있음. | 한번에 원하는 만큼의 인터페이스를 상속할 수 있음. |
다른 구체적인(일반) 클래스 또는 추상 클래스를 상속할 수 있음. | 다른 인터페이스만 상속할 수 있음. |
추상 메서드와 구체적인 메서드를 가질 수 있음. | 추상 메서드만 가질 수 있음. |
메서드를 추상으로 선언하는 데 abstract 키워드가 필요함. | 메서드를 추상으로 선언하는 데 abstract 키워드가 선택 사항임. |
접근 제한자 protected, public이 선언된 추상 메서드를 가질 수 있음. | 접근 제한자 public이 선언된 추상 메서드를 가질 수 있음. |
모든 접근제한자와 함께 static, final, static final 변수를 가질 수 있음. | static final(상수)변수만 가질 수 있음. |
추상 클래스의 선언
- 추상 클래스는 abstract 키워드를 사용하여 선언.
- 클래스 내에 일반 메서드뿐 만 아니라 추상 메서드를 포함할 수 있음.
- 본문이 없는 메서드인 추상 메서드는 abstract 키워드를 사용하여 선언.
- 추상 메서드는 자식 클래스에서 구현됨.
- 이는 부모 클래스가 메서드명만 가지고 있고 자식 클래스가 해당 메서드명을 사용하여 필요에 따라 본문을 정의한다는 것을 의미.
- 추상 클래스는 추상 메서드를 포함할 수도 있고 포함하지 않을 수도 있음.
- 클래스에 추상 메서드가 포함되어 있으면 반드시 추상 클래스로 선언해야 함.
추상 클래스 사용 시 주의사항
- 추상 클래스는 항상 abstract 키워드를 사용하여 선언해야 함.
- 추상 클래스의 모든 메서드를 추상으로 사용할 필요는 없음.
- 추상 클래스에 일반적인 메서드가 포함될 수도 있음.
- 클래스의 메서드 중 하나가 추상 메서드이면 해당 클래스는 추상 클래스여야 함.
- 추상 메서드를 선언하면 자식 클래스에서 해당 메서드를 재정의 해야 함.
- 추상 클래스를 상속하는 경우 메서드 재정의는 필수.
- 상속 받은 클래스와 자식 클래스가 추상 클래스라면 메서드를 재정의하지 않아도 됨.
- 현재 클래스가 상위 클래스처럼 추상적인 경우에는 상위 클래스의 메서드를 재정의 할 필요가 없음.
- 추상 클래스는 자신의 인스턴스를 가질 수 없음.
- 추상적인 클래스의 객체를 가질 수 없으나 추상 클래스를 참조하는 객체는 가질 수 있음.
- 프로그램이 자식 클래스의 객체를 만들 때 컴파일러가 추상 클래스의 생성자를 호출함.
- 상속만 가능하고 객체를 생성할 수 없는 클래스를 생성하려면 추상 클래스 내부에 일반 메서드만 가질 수 있음.
- 단일 클래스가 여러 추상 클래스를 상속 받을 수 없음. 다중 상속을 구현하려면 인터페이스를 사용해야 함.
- 추상 클래스에 final()메서드를 포함할 수도 있음
- 하지만 final 클래스는 추상 메서드를 가질 수 없음.
추상 클래스의 상속
- 추상 클래스는 그 자체의 인스턴스를 만들 수 없기 때문에 상속해서 사용하며, 보통의 클래스처럼 extends 키워드를 이용하여 상속함.
- 일반적으로 자식 클래스는 이러한 추상 클래스를 상속받고 추상 메서드를 재정의하여 사용함.
https://github.com/bottomsUp-99?tab=repositories
728x90
반응형
'Java Study' 카테고리의 다른 글
예외 처리(Exception Handling) (1) | 2024.07.07 |
---|---|
인터페이스(Interface) (0) | 2024.07.02 |
@Override가 있고 없고의 차이 (2) | 2024.06.30 |
상속(Inheritance)이란? (0) | 2024.06.28 |
참조 타입이란? (2) | 2024.06.21 |