-
9일차 - JAVA 인터페이스프로그래밍 언어/JAVA 2021. 4. 12. 22:00
오늘은 인터페이스에 대해 배웠다. 파이썬을 배우면서 접해보지 못한 개념이여서 개념을 익히는데 살짝 어려웠지만 어떠한 기능을 하는 것인지는 알 수 있었다.
<핵심 정리>
1. 인터페이스란?
인터페이스를 간단히 설명하자면 클래스를 생성하는 데 있어서 이미 정해진 규칙과 같은 것이다.
예를 들어 설명하면 프린트를 하는 데 종이의 규격은 정해져있다.
A4, A3, B4 등 이렇게 정해진 종이의 규격을 인터페이스라고 한다면 A4에 프린트를 하면 이미 정해진 규격에 맞춰 클래스를 생성한 것이다.
그러면 코드에서는 어떻게 구현이 될까?
interface Calculable{ int sum(int v1, int v2); } class RealCal implements Calculable{ public int sum(int v1, int v2){ return v1 + v2; } }
Calculable 인터페이스가 생성되어 sum이라는 메소드의 형식을 미리 지정한다.
그리고 RealCal 클래스는 Calculable 인터페이스를 이용한다는 implements 키워드가 사용되었으므로
RealCal에는 반드시 미리 정해진 sum메소드의 형식을 따라 정의되어야한다.
2. 인터페이스의 형식
JAVA에서는 상속을 받을 때 하나의 클래스만 상속받을 수 있다.
하지만 하나의 클래스에서 인터페이스 여려 개 구현이 가능하다.
interface Calculable{ double PI = 3.14; int sum(int v1, int v2); } interface Printable{ void print(); } class RealCal implements Calculable, Printable{ public int sum(int v1, int v2){ return v1 + v2; } public void print(){ System.out.println("Real Cal"); } }
코드를 보면서 설명해보려고 한다.
먼저 위 코드를 보고 확인할 수 있는 것은 세 가지이다.
1. 하나의 클래스가 여러 개의 인터페이스를 구현할 수 있다.
2. 인터페이스에서 메소드를 정의할 때에는 내용까지 정의하는 것이 아니다.
하지만, 변수를 정의할 때에는 그 변수가 어떤 값을 가지는지에 대해서도 정의해주어야한다.
3. 인터페이스에서 변수를 정의했으면 그 변수를 클래스에서 정의하는 것이 아니다.
그냥 클래스에서 해당 변수를 가지는 것이다.
즉, Calculable 인터페이스에서 PI = 3.14라고 정의가 되어있으므로 RealCal 클래스에서는
PI를 정의하는 것이 아니다.(정확히 말하면 정의할 수 없다.)
하지만, RealCal 클래스에서 변수 PI = 3.14라고 구현이 되는 것이다.
3. 다형성(Polymorphism)
다형성은 하나의 클래스가 여러가지의 얼굴을 갖게 하는 것이다.
우리는 이전에 인스턴스에 대해 배운 적이 있다.
new라는 키워드를 이용해 클래스의 복사본인 인스턴스를 만들 수 있다.
우리가 배운 바로는
클래스명 a = new 클래스명()
이렇게 인스턴스를 생성한다.
하지만 클래스가 인터페이스를 구현하고 있을 경우에는 다른 모습으로 인스턴스를 만들 수 있다.
// 보통의 경우 RealCal a = new RealCal() // 다형성 이용 Calculable b = new RealCal() Printable c = new RealCal()
이렇게 인터페이스명을 데이터 타입으로 가진 인스턴스를 생성할 수 있는 것이다.
이렇게 인스턴스를 생성하게 되면 인스턴스 b는 Printable에서 가지고 있는 print메소드를 사용할 수 없게 된다.
-----------------------------------------------------------------------------------------
<9일차 후기>
오늘은 프로젝트를 진행하거나 간단히 무언가를 개인적으로 만들 때 꼭 필요한 기능은 아니지만 취업을 해서 현업에 투입된다면 쓰일만하다고 생각이 드는 인터페이스에 대해서 배울 수 있었다.
그리고 내가 다른 사람의 코드를 봤을 때 인터페이스를 몰랐다면 코드를 이해할 수 없었지만 인터페이스를 알게 되어서 코드를 이해할 수 있는 능력도 향상되었다고 생각한다.
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
온라인 자바 스터디 참여 시작!! (With WhiteShip) (0) 2021.05.19 10일차 - JAVA 예외(Feat. 완강!!, 앞으로의 계획은?) (0) 2021.04.13 8일차 - JAVA 상속 (0) 2021.04.11 7일차 - JAVA 객체지향 프로그래밍(클래스, 인스턴스) (0) 2021.04.09 6일차- JAVA 메스드 (0) 2021.04.08