[SEB BE] Section 1.추상화 - 추상클래스

박두팔이·2022년 12월 30일
0

자바

목록 보기
14/26

추상화

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

추상화를 한마디로 정리하면 “객체의 공통적인 속성과 기능을 추출하여 정의하는 것” 이라 정리할 수 있다.

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


abstract 제어자

abstract의 사전적 의미는 '추상적인'이라는 뜻을 가지고 있다. 자바에서는 '미완성'이라고 이해하면 되겠다.

자바문법상 abstract는 제어자의 위치에 있고 클래스앞에 붙으면 추상클래스, 메서드 앞에 붙으면 추상메서드라고 칭한다.

어떤 클래스에 추상 메서드가 포함되어있는 경우 해당 클래스는 자동으로 추상 클래스가 된다.

abstract class AbstractExample { // 추상 메서드가 최소 하나 이상 포함돼있는 추상 클래스
	abstract void start(); // 메서드 바디가 없는 추상메서드
}

⭐️ abstract의 특징

  • 추상메서드는 메서드 바디가{} 없는 미완성 메서드이다.
  • 추상클래스는 인스턴스화가 불가능 하다.

추상클래스

추상클래스란, 메서드 시그니처만 존재하고 바디가 선언되어 있지 않은 추상 메서드를 포함하는 '미완성 설계도'이다.

따라서 메서드바디가 없는 미완성구조를 가진 추상클래스객체를 생성하는 것이 불가능하다.

앞서, 클래스란 객체를 생성하기 위한 설계도 혹은 틀이라고 이해를 해왔다. 그런데 왜 객체도 생성하지 못하는 미완성 클래스를 만드는 걸까?

💡 추상클래스를 만드는 이유 2가지

  1. 상속관계에서 새로운 클래스를 작성하는데 유용하다.
    : 상위클래스에서는 선언부만을 작성하고 구체적인 내용은 하위클래스에서 오버라이딩하여 구현하도록 비워둔다면 변화에 유연하게 대응할 수 있다.

  2. 자바 객체지향 프로그래밍의 중요기능인 추상화를 구현하는 데 핵심적인 역할을 수행한다.
    : 구체화에 반대되는 개념으로 추상화를 생각해보면 상속계층도의 상층부에 위치할 수록 더 공통적인 속성과 기능들이 정의되어 있다. 이것을 추상화의 정도가 높다고 표현한다.

추상클래스의 오버라이딩

Animal 이라는 추상클래스를 만들고 그 아래 sound()라는 추상메서드가 있다.

Dog,Cat클래스가 각각 Animal 클래스를 상속받는 관계에 있다.

abstract class Animal {
	public String kind;
	public abstract void sound();
}

class Dog extends Animal { // Animal 클래스로부터 상속
	public Dog() {
		this.kind = "포유류";
	}

	public void sound() { // 메서드 오버라이딩 -> 구현부 완성
		System.out.println("멍멍");
	}
}

class Cat extends Animal { // Animal 클래스로부터 상속
	public Cat() {
		this.kind = "포유류";
	}

	public void sound() { // 메서드 오버라이딩 -> 구현부 완성
		System.out.println("야옹");
	}
}

class DogExample {       
    public static void main(String[] args) throws Exception {
       Animal dog = new Dog();
       dog.sound();

       Cat cat = new Cat();
       cat.sound();
    }
 }

// 출력값
멍멍
야옹

이렇듯 추상 클래스를 사용하면 상속을 받는 하위 클래스에서 오버라이딩을 통해 각각 상황에 맞는 메서드 구현이 가능하다는 장점이 있다.


profile
기억을 위한 기록 :>

0개의 댓글