🚩들어가며
오늘은 객체지향의 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 키워드란?
'Web > Java' 카테고리의 다른 글
Java Stream , Lambda만 보면 얼어버리는 사람의 예제코드 뿌시기 프로젝트 (0) | 2022.09.13 |
---|---|
JSON ,ObjectMapper, 직렬화(serialization)역직렬화(deserialization), transferable condition (0) | 2022.07.23 |