본 게시글은 유튜브 인강을 통해 하루 동안 공부한 내용을 바탕으로 복습한 내용입니다.
내용에 오류가 있거나 보충할 내용이 있다면 댓글 남겨주시면 참고하도록 하겠습니다.
유튜브 인강은 생활코딩의 Java 입문수업(생활코딩) 을 참고하였습니다.
1. 인터페이스(Interface)
1) 개념
Java에서 인터페이스(Interface)란 대표적인 규제 중 하나이다. 어떤 객체가 특정 인터페이스를 사용(implements) 한다면 그 객체는 반드시 인터페이스의 메소드들을 구현해야 한다.
즉, 인터페이스는 다른 클래스를 작성할 때 기본이 되는 틀(설계도)을 제공하는 것이다.
인터페이스는 객체의 다형성을 구현하는 데에 중요한 역할을 한다.
A라는 인터페이스를 객체1과 객체2가 사용한다고 가정하자. 이 때 객체1과 2는 각각 인터페이스가 제공하는 기본 틀인 메소드를 호출하고, 인터페이스는 이 객체의 메소드를 호출 시킨다. 이렇게 호출된 메소드를 통해 객체1과 객체2는 각각 리턴값1과 리턴값2를 얻는다. 같은 인터페이스를 사용한 두 객체에서 각기 다른 리턴값을 얻을 수 있는 것이다.
만약 인터페이스를 사용하지 않는다면 각각의 객체에서 같은 메소드 정의를 따로 했어야할 것이다. 가정한 예시는 겨우 2개의 객체였지만 개발 규모가 커지면 커질수록 인터페이스가 주는 효율은 어마어마할 것이다.
위의 예시와 같이 인터페이스는 개발 코드를 변경하지 않고 객체에 따라 실행 내용과 리턴값을 다양하게 한다. 이 점이 다형성을 구현하는 인터페이스의 장점이라고 볼 수 있다.
2) 문법(정의 방법)
인터페이스를 선언하는 방법은 클래스를 선언하는 방법과 동일하다.
다만, 인터페이스는 반드시 public을 사용해야 한다. 외부에서 제어할 수 있는 가장 개방적인 접근 제어자이기 때문이다.
인터페이스의 맴버는 무조건 public이기 때문에 혹시 이를 생략하더라도 Java에서는 자동으로 이를 public으로 설정한다.
접근제어자 interface 인터페이스 이름
public static final 타입 상수이름 = 값 ;
~
public 리턴타입 메소드 이름(매개변수목록) ;
내가 들은 강의는 다소 옛날 버전의 Java를 바탕으로 하기에, Java8부터 등장한 추상메소드, 디폴트 메소드, 정적 메소드에 대한 설명이 부족했음을 본 게시물을 작성하면서 구글링을 통해 깨달았다 .
해당 내용은 빠른 시일 내로 복습하여 추가할 예정이다.
3) 규칙
- 하나의 클래스가 여러 개의 인터페이스 구현 가능
- 인터페이스도 상속 가능
ex) 인터페이스1 < 인터페이스 2 < 객체 1 순으로 상속 가능
- 인터페이스의 멤버는 반드시 public
2. 다형성
1) 다형성이란?
복습을 위해 구글에 검색해보니 가장 상단에 " 부모-자식 상속 관계에 있는 클래스에서 상위 클래스가 동일한 메시지로 하위 클래스들을 서로 다르게 동작시키는 객체 지향 원리" 라는 문구가 가장 먼저 뜬다.
내가 들은 강의에서는 "하나의 클래스가 다양한 동작방법을 가지고 있는 것"이라고 설명하였다.
위에서 복습한 인터페이스가 다형성의 중요한 역할이라는 말이 위 두 정의에서 더 크게 와닿는다.
하나의 인터페이스를 사용하는 두 객체를 통해 이 인터페이스는 두 객체를 통해 다른 리턴 값을 이끌어내면서 다양한 동작방법을 가지게 된다. 이를 다형성이라고 하는 것이다..
2) 구현 방법 및 간단한 예시
- 오버로딩(Overloading)
- 오버라이딩(Overriding)
- 인터페이스(Interface)
본 강의에서는 주로 다형성을 인터페이스와 overriding 측면에서 다루었다. 하지만 찾아보니, 좀 더 다양한 다형성 구현 방법들이 존재하는 걸 알게됐다. 이 또한 공부를 계속하면서 지속적으로 추가할 필요성을 느꼈다.
'Learning-log > JAVA' 카테고리의 다른 글
Java - 기본문법 (변수, 자료형, 형변환, 연산자) (0) | 2023.02.15 |
---|---|
Java - 기초문법(출력문, 주석)(2023-01-16) (0) | 2023.01.19 |
Java - 운영체제와 프로그램, 자료표현 단위(2023-01-16) (0) | 2023.01.19 |
JAVA-Object Class (2022.09.06) (0) | 2022.09.06 |
JAVA - 예외 ( 2022.09.02~2022.09.03) (0) | 2022.09.03 |