본문 바로가기

Java/기본

[Java] 객체지향 - 추상화와 인터페이스

추상화

추상화란 공통적이고 중요한 부분만 추려내어 일반화하는 것을 말한다. 추상화란 구체적이지 않은 개념인 것이다.

자바에서 추상화된 클래스란 구체적이지 않은, 뼈대만 있는 객체를 말한다.

 

추상클래스

추상클래스는 일반변수, 메서드, 상수 등 모두 가질 수 있다.

단, 메서드 n개 중에서 단 1개라도 추상 메서드가 있다면 추상클래스가 된다.

추상메서드가 되면 abstract 키워드를 사용하여 명시하여야 한다

 

 

추상메서드의 선언 예시

public abstract void test();
	//중괄호{}가 없어서 메서드가 하는 역할이 없다

public void test(){
	//빈칸이긴 하지만 {}가 있다. 즉 body 부분을 가진다
};

 

 

추상클래스의 상속관계

추상클래스 간에도 상속이 가능하다. 일반 클래스와 같은 방식으로 extends 키워드를 이용한 방식이 사용된다. 추상클래스의 상속에서는 상속받은 메서드를 재정의 할 필요는 없다. 추상클래스 A를 추상클래스 B가 상속받고, 나중에 일반클래스 C가 메서드를 재정의해도 된다.

 

 

추상화의 활용

추상화는 특정 클래스들이 공통적인 기능을 갖는 경우 이들의 공통되고 중요한 부분만 말그대로 추상화하는데 사용한다. 일반 클래스에서 특별한 기능을 다시 정의하여 사용하려고 할 때 이 부분만 재정의(오버라이딩)하여 사용하게 된다.

 

추상클래스를 사용하는 이유는 여러 클래스가 비슷한 특징을 공유하는 경우 그 특징을 뽑아내어 추상클래스로 만들고 이를 상속받아 사용하는 것이 효율적이기 때문이다.


인터페이스

 

객체의 사용방법을 정의한 타입에

목적 : 직접 객체의 메소드를 호출하지 않도록 하기 위함이다(?)
예를들면 자동차의 부품을 한국타이어라고 구체적으로 코드를 구성하지 않기 위함이다
엥? 뭔가 이상할 것이다.

상위클래스를 선언하여 어떤 타이어와도 호환될 수 있도록 하기 위함이다
예를들어 A클래스 라고만 선언하면 해당 코드를 수정하지 않는한 다른 회사 제품이 들어갈 수가 없다
하지만 타이어 라고 인터페이스를 




인터페이스 의미
서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면이다. 즉, 사용자가 기기를 쉽게 동작시키는데 도움을 주는 시스템
즉 두 기계장치[부품]이 부드럽게 연결되도록 도움을 주는 역할을 하는 것이 바로 인터페이스인 것이다