Wanna be Brilliant Full-Stack Developer
자바객체지향프로그래밍 인터페이스 본문
인터페이스에대해 알아보자!
인터페이스의 정의를 보면 ? 인터는 교차로라는 뜻을 가지고 있다.
페이스는 직면하다 및 얼굴이라는 뜻을 가지고 있다.
인터페이스를 어떤 교차로 얼굴이라고 생각을 하면 이해가 안된다.
자동차가 이동을 가다가 갈림길을 만나서 어느 방향으로든 갈 수가 있는데!?
고속도로에서 그교차로를 인터체인지라고 한다.
밑이나 가운데나 위에나 다 갈 수가 있다.
인터체인지 입장에서 보면 인터체인지를 만든 사람은 우리한테 세개의 길만 줬다.
1시 방향, 3시 방향, 5시 방향만 줬다.
다른방향은 주지 않고 3가지 방향만 줬다.
내가 12시 방향을 가고 싶어도 갈 수가 없다. 왜냐하면 길이 없으니까
인터체인지는 우리에게 3가지 방향만 주기 떄문에 다른방향은 갈수가 없다는 어떤 행위에대한 강제성을 줬다.
우리가 인터페이스를 어떻게 이야기하는가? 우리는 약속으로 이야기를 한다.
이 약속이 조금 개념이 일방적인 약속이다.
왜 일방적인 약속이냐면 내가 차를 타고 가다가 나는 6시방향을 가고 싶어도 6시 방향이 없으면 갈수가 없다.
만든사람 입장에서 일방적인 약속을 한것이다. 넌 무조건 1시, 3시 ,5시 만 갈 수있어 라는 인터체인지를 사용하면
다른 방향으로 가고 싶으면 인터체인지 사용하지말고 다른곳으로가라고 할 수 있다.
인터페이스는 값과 을이 존재하는 약속이다. 갑이 일방적으로 이렇게해 라는 약속을 주면 을은 따를 수 밖에 없다.
왜 이런 인터페이스가 만들어지는가?
만약에 우리집에서 우리 동네에서 유일하게 우물이 있다고 생각해보자
우물은 자신의 것이니까 자신만 사용할 수 있다.
다른집에 있는 사람들은 이 A라는 사람과 B라는 사람은 우물을 사용할 수가 없다.
근데 우리집 입장에서 성의를 베푸는 것이다
A와 B야 우물을 사용하고 싶니? 라고 물어보면 사용하고 싶다고하면
그러면 언제사용하는게 좋을까
A가 새벽 4시에 매일 일어나는데 내가 그떄 일어나서 푸러 갈게 라고 하면 안된다고 할 수 도있기 떄문에 일방적인 약속이다.
표를 만들면 1번 오후 2시부터 4시까지 사용가능
1L 이상 가져갈 수 없다고 표를 짠다고 하면? 이것이 인터페이스이다.
인터페이스는 일방적인 약속이다.
프로토콜이랑은 개념이 다르다. 프로토콜도 약속이다.
이건 일방적인 약속이 아니라 A와 B와 C가 서로 상호합의 해서 한것이라서 동등한 관계에서 한 약속이다.
자바에서는 인터페이스가 행위에 대한 제약이 있다.
행위에 대한 제약을 주는데 어떤 제약을 주는가?
만약에 사나운 동물이 있다고 하자.
그리고 온순한 동물이 있다.
사나운동물은 공결을 할 수가 있고 온순한 동물은 채집을 할 수 가 있다.
온순한 동물은 채집은 하는데 이떄 원숭이가 있고 소가 있으면 채식을 할떄
원숭이는 바나나를 채집하고 소는 풀을 채집한느데!
원숭이와 소가 채집하는 방식이 다르니까 이채집을 구현을 하지 못하고 추상적으로 만들어 놓는다.
호랑이와 코뿔소가 있으면 호랑이는 이빨로 공격을 하고 코뿔소는 박치기로 공격을 한다.
이떄 공격하는게 다르니까 추상적이라는 것이다.
엄청난 큰맵이 있으면 호랑이와 코뿔소라는 애가 있고 소와 원숭이가 있다.
코뿔소는 박치기로 공격을 하고 호랑이는 이빨로 공격
원숭이는 바나나를 채집하고 소는 풀을 채집한다.
이렇게 다 만들었는데?! 공격을 하려고하면 일단 움직여야한다.
이 맵안에서 움직여야한다. 이 움직임에 대한 행위가 필요한데
전부다 위로가거나 밑으로 내려가거나 왼쪽, 오른쪽으로도 연습이 필요하다.
그래서 이 행위에 대한 이 4가지 행위를 가지고 있는 인터페이스를 만들어보려고 한다.
이 행위대한 제약을 준다. 말하는것도 못하고 점프도 못하고 4가지에 대한 행위에 대한
조약을 주는것이 인터페이스이다.
'Some Memos > Java' 카테고리의 다른 글
자바객체지향프로그래밍의 이해 SRP와 DIP (1) | 2023.03.13 |
---|---|
자바 객체지향 프로그래밍 인터페이스와 추상클래스의 차이 (0) | 2023.03.12 |
자바 객체지향프로그래밍 추상 클래스 (0) | 2023.03.06 |
자바 객체지향프로그래밍의 이해 오버라이딩 (0) | 2023.03.02 |
자바 객체프로그래밍의 이해 오버로딩 (1) | 2023.03.02 |