1.9.7 추상화

yeonseong Jo·2023년 4월 29일
0

SEB_BE_45

목록 보기
16/47
post-thumbnail

추상화의 아버지 칸딘스키의 자화상

java oop 챕터의 마지막이자 핵심
추상화
오늘은 이 추상화에 대해 공부했다.


추상화

보통 사람들이 알고 있는 "추상적인"에서 추상과
완전 다른 느낌을 가지고 있는 oop의 추상에 대해
oop 챕터를 들어가면서 대강 알려줬었는데,
(대상의 특징, 기능을 나열하는 것)
오늘 공부한 추상화는
그때 알게된 추상의 업그레이드 버젼인거 같았다.


abstract

이 추상화에 대해 제대로 구현하기 위해
"추상 클래스"에 대해 알 필요가 있다.
추상 클래스는 미완성 설계도와 같다.

abstract class Parent{
	...
}

위와 같이 class keyword 앞에 abstract keyword를 통해
추상 클래스 선언이 가능하고,
이 추상 클래스는 인스턴스로 만들어질 수가 없다.

class Main{
	Parent p = new Parent(); // 오류 !!
}

그리고

abstract class Parent{
	abstract int method();
    // abstract method는 body({}) 구현 불가
}

추상 클래스 안에서
method 앞에 abstract keyword를 붙임으로써
추상 클래스를 상속받는 하위 클래스들에게
이 method를 강제시킬 수 있다.

class Child1 extends Parent{
	int method(){
    	// body
    }
}

interface

인터페이스는 class keyword와 같은 위치에
interface keyword로 생성이 가능하고,
추상 클래스와 유사한 기능을 한다.

특징

하지만, 일반적인 클래스와 비슷한 추상 클래스와 달리
인터페이스는 추상 method와 상수만을 가질 수 있다.

interface InterFace{
	int a = 0;
    String getLine();
}

인터페이스 내에서 생성하는 모든 method는
별도의 abstract 선언 없이 public abstract로 정의되고
상수는 선언 시 컴파일러가
public static final keyword를 자동으로 추가해 준다.

default method

interface InterFace{
	String getLine();
	default void print(){
    	System.out.println("hi");
    } 
}

위와 같이 interface 내에서도
default keyword를 통해 구현한 method는
인터페이스를 구현한 클래스에서 따로 구현할 필요 없고,
그대로 가져다 쓰거나, 오버라이딩이 가능하다.

구현 클래스

class EnterFace implements InterFace, ...{
	public String getLine(){
    	// 반드시 구현!!
    }
}

인터페이스는 implements keyword를 사용하여
구현 클래스에서 사용이 가능하고,
일반적인 상속과 달리, 여러개의 인터페이스 사용이 가능하다.

회고

abstract keyword와 interface에 대해 알게되었다.
특히 interface가 특이한거 같아 따로 공부를 더 했는데,
따로 공부를 하면서 default method도 알게되어
좋았던거 같다.
다음엔 클래스간의 의존성을 낮추는
DI(Dependency Injection)에 대해 공부해야겠다.

profile
뒤(back)끝(end)있는 개발자

0개의 댓글