My Melody Is Cute JAVA 기초 11 객체지향프로그래밍 심화
본문 바로가기

개발공부🌷/JAVA

JAVA 기초 11 객체지향프로그래밍 심화

추상화

기존 클래스들의 공통적인 요소들을 뽑아서 상위클래스를 만들어 내는 것

객체의 공통적인 속성과 기능을 모아서 정의하면

코드의 중복을 줄일 수 있고, 효과적으로 클래스간의 관계를 설정할 수 있다 , 유지 보수가 용이 해진다.

 

abstract 제어자

미완성

메서드 앞에 붙으면 추상 메서드 클래스 앞에 붙으면 추상 클래스

( 어떤 클래스에 추상메서드가 포함되면 자동으로 추상클래스가 됨)

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

 

추상 메서드

메서드의 시그니처만 있고 바디가 없는 메서드 미완성 메서드

AbstractExample abstractExample = new AbstractExample(); // 에러발생. 

바디가 완성되기 전까지 객체생성 불가

 

왜 객체생성도 못하는 미완성인 클래스를 만들까?

1. 상속관계에 있어 새로운 클래스를 작성하기에 매우 유용하다.

메서드의 내용이 상속을 받는 클래스에 따라서 종종 달라지기 때문에 상위 클래스에서는 선언부만 작성하고 구체적인 내용은

하위클래스에서 구현하도록 비워둔다면 상황이 변해도 유연하게 대응할 수 있다.

오버라이딩을 통해 추상메서드를 구현

2. 각각 상황에 맞는 메서드 구현이 가능 (추상화 구현)

 

상속계층도의 상층부에 위치할수록 추상화의 정도가 높고 그 아래로 내려갈수록 구체화된다

상층부에 가까울수록 더 공통적인 속성과 기능들이 정의

 

final 키워드

더이상 변경이 불가하거나 확장되지 않는 성질

필드, 지역 변수, 클래스 앞에 위치할 수있고 위치에 따라 의미가 조금씩 달라짐

위치 의미
클래스 변경 또는 확장 불가능한 클래스, 상속 불가
메서드 오버라이딩 불가
변수 값 변경이 불가한 상수

 

인터페이스

두 개의 다른 대상 사이를 연결 GUI 아이콘등으로 시각화한 사용자 인터페이스

추상메서드의 집합

추상클래스보다 더 높은 추상성을 가진다

추상클래스는 추상메서드를 하나이상 포함한 것 외에는 일반 클래스와 동일

but 인터페이스는 기본적으로 추상메서드와 상수만을 멤버로 가질 수 있다

인터페이스의 기본 구조 : class 대신 interface사용

내부의 모든 필드가 public static final로 정의 static default 메서드 이외모든 메서드가 public abstract로 정의 된다

위의 요소가 내포되어있기에 명시하지않아도 생략 가능

public interface InterfaceEx {
    public static final int rock =  1; // 인터페이스 인스턴스 변수 정의
    final int scissors = 2; // public static 생략
    static int paper = 3; // public & final 생략

    public abstract String getPlayingNum();
		void call() //public abstract 생략 
}

인터페이스는 interface 키워드를 사용하여 만들어지고 구현부가 완성되지 않은 추상 메서드와 상수만으로 구성되어 있습니다. 인터페이스 안에서 상수를 정의하는 경우에는 반드시 public static final로, 메서드를 정의하는 경우에는 public abstract로 정의되어야 하지만 위에서 보시는 것처럼 일부분 또는 전부 생략이 가능합니다.

여기서 생략된 부분은 컴파일러가 자동으로 추가해 주게 됩니다

 

인터페이스의 구현

class 클래스명 implements 인터페이스명 {
		... // 인터페이스에 정의된 모든 추상메서드 구현
}

인터페이스를 구현한 클래스는 해당 인터페이스에 정의된 모든 추상메서드를 구현해야한다

즉 인터페이스를 구현한다는 것은 그 클래스에게 인터페이스의 추상메서드를 반드시 구현하도록 강제하는것을 의미

모든 추상메서드를 해당 클레스내에서 오버라이딩 하여 바디를 완성.

인터페이스의 다중구현

상속에선 다중상속이 허용되지 않지만 인터페이스는 다중적 구현이 가능하다
인터페이스는 인터페이스로만 상속이 가능
클래스와 다르게 Object  클래스와 같은 최고조상이 존재하지 않는다.
특정 클래스는 다른 클래스로부터의 상속을 받으면서 동시에 인터페이스를 구현할 수 있다
역할과 구현을 분리시켜 사용자 입장에서 복잡한 구현의 내용 또는 변경과 상관없이
코드 변경의 번거로움을 최소화하고 손쉽게 해당 기능을 사용할 수 있게 만들어준다

추상화 (프로그래밍) - 해시넷 (hash.kr)