Step2. 인터페이스

이신욱·2023년 7월 25일
0

Spring

목록 보기
2/11
post-thumbnail

앞 장에서 JAVA를 기준으로 객체 지향 프로그래밍의 특징에 대해서 알아보았다.
오늘은 JAVA에서 굉장히 중요한 개념중 하나인 인터페이스에 대해서 알아보자

0. 객체 지향의 목적


그 전에 우리가 알아봤던 객체지행의 4가지 특징을 이용해서 얻고하는 목적을 되뇌어보자.
간단하게 정리해보면

문제를 추상화(단순하게) 하고, 코드의 재사용성을 높이고, 유지보수성을 높이고, 확장성과 유연성을 높이고, 코드의 표준화를 통해 일관성을 유지하는 것 이라고 볼 수 있다.

1. 인터페이스란?


앞서 객체 지향의 특징 중 추상화와 다형성을 설명하면서 인터페이스에 대한 이야기를 했었는데,
인터페이스란 정확히 무엇을 말하는 것일까?
인터페이스는 클래스들이 구현해야 하는 기본 기능을 제공함과 동시에 다른 클래스 사이의 중간 매개 역할을 담당하는 일종의 추상클래스이다.

2. 인터페이스의 목적 및 객체 지향적 특징


인터페이스의 주요 목적은 아래와 같다.

  1. 인터페이스를 구현한 여러 구현체들을 통일된 명세로 정의한다 -> 표준화
  2. 설계와 구현을 분리한다. -> 유지보수성 증가
  3. 인터페이스를 통해 다양한 객체를 동일한 방법으로 이용한다. -> 다형성 구현
  4. 한 객체가 특정 객체에 종속되지 않도록 한다. -> 결합도 낮춤

얼핏 봐도 인터페이스의 목적이 객체지향의 목적과 부합하다는 것을 알 수 있다.

하나씩 간단하게 살펴보면

● 인터페이스를 구현한 여러 구현체들을 통일된 명세로 정의한다.

인터페이스를 구현하는 구현체(클래스)들은 동일한 매서드들을 반드시 구현해야 하기에
여러 클래스들의 일관성을 보장할 수 있다.
이를 통해 프로그램의 구조를 명확히 하고, 표준화 된 개발이 가능하다.

● 설계와 구현을 분리한다.

인터페이스는 "What(무엇)"을 하는지만 정의하고 구현의 이를 상속하는 클래스들이 하게 된다.
따라서 변경이 발생할 때 해당 클래스만 수정하면 되기 때문에 유지보수성을 높일 수 있다.

● 인터페이스를 통해 다양한 객체를 동일한 방법으로 이용한다.

인터페이스를 구현한 여러 클래스들은 동일한 인터페이스를 사용하면서도 다양한 구현이 가능해진다.
따라서 코드의 재사용성 및 유연성이 높아진다.

예시)

public interface Phone {
	public void ringing();
}

public class Iphone implements Phone{

	@Override
    public void ringing(){
    System.out.println("MARIMBA~~");
    }
}

public class Galaxy implements Phone{

	@override
    public void ringing(){
    System.out.println("Over The Horizon ~~");
    }
 }

public class ChangePhone{
	public static void main(String[] args) {
    	Phone myPhone = new Iphone;
        myPhone.ringing();
        // 출력 -> MARIMBA~~
        
        myPhone = new Galaxy();
        myPhone.ringing();
        // 출력 -> Over The Horizon ~~
	}
}

● 한 객체가 특정 객체에 종속되지 않도록 한다.

한 객체는 인터페이스를 통해 객체와 상호작용하게 되므로, 
객체 간의 결합도가 낮아져 코드의 유연성 및 확장성이 향상된다.
위의 예시를 보면 myPhone이라는 객체는 인터페이스인 Phone을 통해
다른 객체 클래스(객체)와 상호작용하는것을 볼 수 있다.

이것을 객체지향의 4가지 특징과 연결해서 다시한번 정리하면

  • 캡슐화 : 연관된 기능을 하나로 묶어놓고 설계와 구현을 분리하여 객체(클래스)내부 구현의 변경이 발생하여도 인터페이스를 수정하지 않아도 됨

  • 추상화 : 인터페이스는 설계의 역할만 담당 구현은 인터페이스를 구현하는 클래스가 담당하므로 코드를 단순화하고 불필요한 중복을 제거함

  • 다형성 : 인터페이스를 구현하는 클래스들은 인터페이스가 가지는 기능(메서드)들을 각자 다른 방식으로 구현할 수 있음

  • 상속 : 클래스들은 인터페이스를 상속하여 인터페이스의 메서드를 각자 구현할 수 있음(중복 상속 가능)

3. 마무리


인터페이스를 사용하면서 사실 느낌적으로만 알고있었지 글로 설명하려 하니 상당한 고민이 필요했다...
인터페이스를 왜, 무슨 목적을 가지고 사용하는지 다시 되돌아보는 시간이 되었다.

공부 열심히 해야겠다ㅠㅠ

profile
1인분 하는 개발자 되기

0개의 댓글