Web/Java

⭐추상화(1) 상속vs추상화, abstract제어자, 추상클래스, 추상메서드, final 키워드

TLdkt 2022. 7. 18. 08:20
728x90
반응형


🚩들어가며

오늘은 객체지향의 4대 기둥 중 하나인 추상화 1편을 작성해봤다. 
추상화와 상속의 개념적 차이는 무엇인지, 추상클래스와 추상메서드는 무엇인지 알아보자. 

 


👀학습목표

 - 추상화의 핵심 개념과 목적을 이해하고 설명할 수 있다.
- `abstract` 제어자가 내포하고 있는 의미를 이해하고, 어떻게 사용되는 지 설명할 수 있다.
- 추상 클래스의 핵심 개념과 기본 문법을 이해할 수 있다.
- `final` 키워드를 이해하고 설명할 수 있다.

 

🌱추상화

공통성과 본질을 모아 추출이 핵심

java에서는 객체의 공통적 속성, 기능을 추출하여 정의하는 것을 의미

🌱상속과 추상화의 구분

상속: 하위클래스 정의를 위해 상위 클래스 사용

추상화: 기존 클래스 공통 요소를 뽑아 상위클래스 만들기

상향, 하향 상관없음

이동수단→차, 오토바이 이든

차, 오토바이 공통→이동수단 이든

과정과 상관없이 공통 속성과 기능을 모았다는 것에는 차이가 없음

**추상클래스**, **인터페이스**를 통해 추상화 구현

🌱abstract제어자

자바의 맥락에서 abstract 라는 단어가 내포하는 의미는 ‘미완성’

abstract method, abstract class 를 만드는 키워드

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

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

🌱추상메서드=미완성 메서드

메서드 시그니처만 있고 바디가 없는 메서드

추상클래스는 메서드 바디 완성 전까지 객체 생성 불가능, 미완성 설계도이므로


error: abstract methods cannot have a body
    abstract void abstractMethod(){};

아예 바디를 가질 수 없다고 나온다.

🌱추상 클래스:: 객체 생성도 못하는 추상클래스는 왜 만들까?

(1) 상속 시 이점

메서드의 내용이 상속을 받는 클래스에 따라서 종종 달라지기 때문에 상위 클래스에서는 선언부만을 작성하고, 실제 구체적인 내용은 상속을 받는 하위 클래스에서 구현하도록 비워둔다→오버라이딩

 

(2) 전반적인 틀 역할

일종의 스케치 같은 개념

여러 사람이 함께 개발하는 경우, 공통된 속성과 기능임에도 불구하고 각각 다른 변수와 메서드로 정의되는 경우 발생할 수 있는 오류를 미연에 방지

추상화↔구체화

상속 계층도의 상층부일수록 추상화의 정도가 높음, 아래일수록 구체화

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

        Cat cat = new Cat();
        cat.sound();
    }
}
//참조변수를 상위클래스타입으로 만들었는지, 하위클래스 타입으로 만들었는지 여부에 따른 메서드 결과 비교
abstract class Animal{
    public String kind;
    public abstract void sound();//추상메서드 바디의 괄호가 없는 거지 호출자와 헷갈리면 안 됨
}

class Dog extends Animal{
    public Dog(){
        this.kind = "포유류";
    }
    //오버라이딩으로 sound 구현
    public void sound(){
        System.out.println("왈왈");
    }

}
class Cat extends Animal{
    public Cat(){
        this.kind = "포유류";
    }

    public void sound() {
        System.out.println("먀");
    }
}

🌱final 키워드

final키워드는 필드, 지역 변수, 클래스 앞에 위치

변경 불가능, 확장 금지

 

❓Recap

추상화와 상속의 차이점은?

추상클래스란?

추상메서드란?

추상 클래스를 쓰는 이유는?

final 키워드란?

728x90
반응형