일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 타입이 서로 다른 두 데이터 제네릭
- final
- 타입 변수 표기법
- 메소드 정의
- 메소드 지정자
- spring
- db
- static
- static을 왜사용할까?
- unity 레이아웃
- response
- C#
- MariaDB
- DROP
- WriteLine
- @ Builder
- ForignKey
- http
- unity 간단 설정
- Create
- unity 오브젝트
- request
- 데이터베이스
- Database
- JDBC
- java
- 요청
- select
- c#상속
- 평면좌표상에서 두점 거리 구하기
- Today
- Total
이론을 싫어!
[java]인터페이스 it에서 말하는 인터페이스 과연 똑같은것일까? 본문
우리가 보통 IT 에서 인터페이스는 컴퓨터와 다른 주변기기를 연결하는 표준을 의미한다.
그러면 자바에서는 인터페이스는 무슨 뜻일까? 똑같은 뜻을 가진것일까??
자바에서 인터페이스는 구체적인 구현 없이 기능만 선언한 클래스 라고 한다.
자바의 인터페이스는 추상 메소드와 상수로만 이루어져 있다.
자 아마 읽어봐도 무슨 뜻인지 확 다가오지 않을것이다. (TMI : 왜냐하면 저도 공부할 때 이해가 되었음...)
자 실습을 통해서 한번 알아보자
(Remote.java)
1
2
3
4
5
|
public interface Remote { //리모컨 인터페이스
public void PowerOn(); // 전원켜기
public void PowerOff(); // 전원 끄기
public void AddFunction(); // 추가기능
}
|
cs |
(Samsung.java)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public class Samsung implements Remote{
@Override
public void PowerOn() {
System.out.println("삼성 티비를 켭니다.");
}
@Override
public void PowerOff() {
System.out.println("삼성 티비를 끕니다.");
}
@Override
public void AddFunction() {
System.out.println("음악듣기 기능이 있습니다.");
}
}
|
cs |
(LG.java)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public class LG implements remote{
@Override
public void PowerOn() {
System.out.println("LG 티비를 켭니다.");
}
@Override
public void PowerOff() {
System.out.println("LG 티비를 끕니다.");
}
@Override
public void AddFunction() {
System.out.println("전화받기 기능이 있습니다.");
}
|
cs |
(RemoteTest.java)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public class RemoteTest {
public static void main(String[] args) {
Samsung samsung=new Samsung();
samsung.PowerOn();
samsung.AddFunction();
samsung.PowerOff();
LG lg=new LG();
lg.PowerOn();
lg.AddFunction();
lg.PowerOff();
}
}
|
cs |
결과값
1
2
3
4
5
6
|
삼성 티비를 켭니다.
음악듣기 기능이 있습니다.
삼성 티비를 끕니다.
LG 티비를 겹니다.
전화받기 기능이 있습니다.
LG 티비를 끕니다.
|
cs |
실 생활에서 어떤 예제로 들까 생각을 하다가 리모컨의 예제를 들어봤다.
브랜드 리모컨을 구분하지 않고 우리가 보통 리모콘의 대표적인 기능은 티비를 켜고 끄기가 있다.
그러면 리모컨에 티비를 켜고 끄는 메소드를 인터페이스로 해놓고
삼성과 엘지 리모컨의 클래스를 만든다음에 각각 회사에서 연동되는 기능을 자기 클래스 에서 붙이는것이다.
이때 인터페이스를 상속을 받아야하는데 그때는 extends 가 아니라 implements로 상속을 받아야 한다.
그리고 상속을 받게 되면 그 기능들은 무조건 자식 클래스 즉 , implements로 상속을 받은 클래스에서 구현을 해줘야한다.
근데 사실 저는 이해가 되서 최대한 쉽게 적는다고 생각하는데
모르는 입장에서 저 리모컨의 코드를 보면 이해가 힘들거라고 생각이 들었다.....
그러면 정말 쉬운 예를 들자
가장 간단한 동물 에 대한 예시이다.
동물은 짓기와 움직이기가 어떠한 동물이든 한다.
다만 그 동물이 어떤 동물인지에 따라서 짓는 소리가 다를것이고 움직이기 또한 다를것이다.
(원래 한글로 적으면 안되지만 이해하기 편하게 하기 위해서 한글로 대체 )
1
2
3
4
5
|
public interface 동물 {
public void 짓기();
public void 움직이기();
}
|
cs |
모든 동물은 짓기와 움직이기를 한다고 하니 이것을 인터페이스로 생성을 한다.
그리고 그 동물이 어떤 동물 인지에 따라서 짓는 소리가 다를것이고 움직이기가 다르다.
1
2
3
4
5
6
7
8
9
10
11
12
|
public class 강아지 implements 동물{
@Override
public void 짓기() {
System.out.println("멍멍");
}
@Override
public void 움직이기() {
System.out.println("푸다다다닥");
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
|
public class 고양이 implements 동물{
@Override
public void 짓기() {
System.out.println("야옹");
}
@Override
public void 움직이기() {
System.out.println("사뿐사뿐");
}
}
|
cs |
이렇게 고양이와 강아지 클래스가 있고 거기에 implements로 동물을 상속받는다.
상속을 받으면 그 상속을받은 동물 인터페이스 안의 메소드는 자기 클래스안에서 무조건 구현을 해줘야하는것이다.
강아지는 멍멍 거리고 고양이는 야옹 거린다. 이러한 각각의 기능들을 구현을 하는것이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public class 동물테스트 {
public static void main(String[] args) {
강아지 강아지 =new 강아지();
강아지.짓기();
강아지.움직이기();
고양이 고양이=new 고양이();
고양이.짓기();
고양이.움직이기();
}
}
|
cs |
그리고 난뒤 동물테스트 클래스를 실행하게되면 정상적으로 출력이 되는것을 볼수 있다.
그리고 인터페이스는 객체를 만들수 없다. 왜냐하면 추상메소드에 아무것도 없기 때문에 객체를 만들수가 없다.
즉, 인터페이스는 기본적인 틀만 존재하기 때문에 객체를 만들수 없는것이다. 그렇기 때문에 객체를 생성을 해야된다면
상속을 받은 클래스를 객체를 만들수 있다. (강아지, 고양이 클래스)
그러면 여기서 드는 의문은 인터페이스와 추상클래스는 같은것이 아닌가?
결론은 아니다. 물론 공통적인 부분도 존재는 한다.
공통점은 메소드의 선언만 이고, 구현 내용이 없다는것이다.
하지만 차이점은 추상 클래스는 extends 키워드를 사용하고 인터페이스는 implements 키워드를 사용한다는 것이다.
추상 클래스는 변수, 생성자, 일반 메소드, 추상 메소드 모두다 사용가능하지만 인터페이스는 상수와 추상메소드만 사용할수 있다는점도 있따.
'java' 카테고리의 다른 글
[java] 오버로딩과 오버라이딩~ (0) | 2023.03.31 |
---|---|
[java]Math클래스를 사용해서 편리하게 계산하자 (0) | 2023.03.31 |
제네릭 이 뭐지?? 너 진짜 편하더라?? (0) | 2023.03.31 |
[Java] Getter / Setter 메소드 이미그레이션 역할을 한다..? (0) | 2023.02.28 |
[java] 조건문?? 조건은 또 뭐야?? (0) | 2023.02.28 |