7. 클래스 - (6) 추상화(abstract)

한승록·2023년 4월 29일
0

자바 기초

목록 보기
16/21
post-thumbnail

1) 추상 클래스의 정의

추상화는 클래스 속성을 중심으로 공통적 특성을 모아 클래스를 정의하는 작업을 의미합니다.
그리고 추상화로 생성되어 이상의 추상 메서드를 포함하는 클래스를 추상 클래스라고 합니다.
추상 메서드추상 클래스의 기본적인 형태는 다음과 같습니다.
		// 추상클래스
		abstract class Animal {	// abstract class 클래스명
        
        }
        
        
        // 추상 메서드
        // - 메서드 {}가 없고 ;(세미 콜론)으로 마무리
        abstract void feed();	// 추상 메서드는 내용을 가질 수 없습니다.




2) 추상 클래스의 특성

예시로 작성한 구문에서 알 수 있다시피 추상 클래스추상 메서드를 가지지만 메서드 안에 정작 내용을 넣을 수는 없습니다. 그렇다면 추상 클래스를 만드는 이유가 없지 않나라는 의문점이 생깁니다.

여기서 필요한 중요 개념이 바로 상속오버라이딩 입니다.
앞서 정의한 내용중에 클래스들의 공통적 특성 을 모으는 것이 추상화라고 말씀드렸습니다.
또한 추상 클래스는 내용을 가질 수 없는 추상 메서드를 하나 이상 포함한다고 말씀드렸습니다.

그렇다면 상속오버라이딩 에 최적화 되어있지 않을까요?
abstract class Animal {
	
	abstract String feed();
}

class Cat extends Animal {
	private String catFeed;
	
	public Cat(String catFeed) {
		this.catFeed = catFeed;
	}
	
	
	@Override
	public String feed() {
		return String.format("고양이가 %s를 먹습니다", catFeed);
	}
}

class Dog extends Animal {
	private String dogFeed;
	
	public Dog(String dogFeed) {
		this.dogFeed = dogFeed;
	}

	@Override
	public String feed() {
		return String.format("강아지가 %s를 먹습니다", dogFeed);
	}
}



public class Velog {
	public static void main(String[] args) {
		
//		Animal impassible = new Animal();
		
		Cat cat = new Cat("츄르");
		System.out.println(cat.feed());
		
		Dog dog = new Dog("개껌");
		System.out.println(dog.feed());
		
		
	}
}
    

<※ 결과는 다음과 같습니다.>

어떠신가요? 앞선 내용의 학습이 충분히 이루어지셨다면 해당 개념은 이해하기 쉬울뿐더러 추상화의 재사용성과 공통 특성을 가진 클래스의 생성에 유연함을 더해 줄 수있다는 점에서 코드 작성 시 충분한 매력포인트로 다가 오실겁니다.

하지만 동시에 그냥 슈퍼 클래스(부모 클래스)를 생성하여 상속하면 되지 않겠냐는 의견을 말씀하실 수 있으실 겁니다.
여기에는 일반적인 슈퍼 클래스추상 클래스의 차이가 있기 때문입니다.

바로 추상 클래스는 직접적으로 객체를 생성할 수 없다는 것입니다.
위 예제의 Animal impassible = new Animal(); 코드를 봐주시길 바랍니다.
<※ 결과는 다음과 같습니다.>

따라서 무엇이 더 좋고 효율적이기 보다는 서로 상황에 맞는 사용이 필요할 것입니다.
profile
개발 학습

0개의 댓글