지금 공부하고 있는데 왜 필요한지, 값이 왜 그렇게 나오는지 이해가 잘 안 감... ㅇㅅㅇ
댓글 31
계층적 구조 없이 자바의 다형성을 이용할 수 있어서
익명(1.236)2023-01-20 12:07
답글
뭔 말인지 모르겠어...ㅇㅅㅇ
익명(dsk695861)2023-01-20 12:11
답글
인터페이스(추상메서드로만 이루어진 클래스) 왜 쓰는거? == 추상메서드로만 이루어진 클래스를 왜 씀?
-> 추상메서드가 어떻게 돌아갈 지 상상(선언)만 미리 해놓고 코딩할때 좋음. 난 걍 상상 속의 메서드 이용해서 메인파트 코딩할 때, 상상에 대한 진짜 구현은 다른 동료가 해줄 수 있음. 협업에 용이함
-> 근데 추상메서드 쓰는거면 걍 추상클래스 쓰면 되는거 아님? == 그럼 인터페이스랑 추상클래스는 각각 언제 쓰이는데?
-> 추상클래스는 상속받아서 써야해서 계층적구조를 따를 수 밖에 없음. 반면에 인터페이스는 계층적 구조를 벗어나서 서로 다른 두 클래스의 관계를 지어줄 수 있음
익명(211.244)2023-01-20 12:30
답글
오호... 그니깐 추상메서드로만 이뤄졌다는 점에서 추상클래스와 인터페이스는 그 역학이 매우 비슷하지만, 계층적 구조를 따라야만 쓸 수 있는 추상클래스와 달리 인터페이스는 계층적 구조에서 벗어난 상황에서 쓸 수 있게 만들어준다는거네ㅇㅅㅇ. ㄳㄳ
익명(dsk695861)2023-01-20 12:37
코드의 재활용이요
모드맵퍼(modmapper)2023-01-20 12:08
답글
어떻게 재활용이 가능하다는 거임?
익명(dsk695861)2023-01-20 12:11
답글
해당 인터페이스를 파라미터로 받는 코드가 있으면
해당 인터페이스 구현만 하면 온갖곳에서 다 사용할 수 있지
모드맵퍼(modmapper)2023-01-20 12:15
답글
인터페이스가 구현 객체의 추상메소드를 모두 가지고 있어야만 사용가능하겠넹 ㅇㅅㅇ
익명(dsk695861)2023-01-20 12:20
인터페이스 분리 원칙
익명(122.42)2023-01-20 12:09
어디 쓰는지 모르면 디자인패턴 책 봐라 거기 보면 예제 줄줄 나온다
익명(220.81)2023-01-20 12:16
답글
ㄳㄳ
익명(dsk695861)2023-01-20 12:18
다형성은 실무 안해보면 필요성 느끼기 어렵긴 함
ㅇㅇ(106.72)2023-01-20 12:18
인터페이스 ㅈㄴ 좋은데
데브사이코(119.65)2023-01-20 12:24
여기 댓글들 다 두리뭉실하네... 하긴 뭐 학교나 책에선 다 대충 두리뭉실하게 이야기 해줌
익명(211.109)2023-01-20 12:33
답글
애초에 질문 자체가 너무 광범위하고 말 할 건덕지가 많아서 진짜 제대로 답변할려면 a4 몇장 채워야해ㅋㅋ
익명(211.244)2023-01-20 12:36
답글
아니 그게 아니지
익명(211.109)2023-01-20 12:37
인터페이스의 사용 이유는 하나로 보면 된다.
오히려 인터페이스라는 말보다 아이폰 오브젝트C 해봄?
거기에서 딜리게이트(Delegate) 위임이라는 개념으로 생각해야 더 쉽다.
자바의 swing으로 버튼을 만들어봤겠지?
거기에 보면 JButton btn = new JButton("Click");
btn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
// 동작 구현
}
}
익명(211.109)2023-01-20 12:39
이런식으로 버튼의 동작을 등록해서 세부 내용을 구현할수가 있다
익명(211.109)2023-01-20 12:39
저 이벤트의 액션퍼폼드 내용 안에는 비어 잇어 너가 직접 오버라이딩 해서 채우는거다.
익명(211.109)2023-01-20 12:40
즉, 자바의 swing 프레임워크를 만든 제작자들은 버튼의 동작을 해주는 부분만 구현을 해놓고
속 알맹이 버튼을 동작시켰을때 어떤 작업을 할지는 빈칸으로 놔둔거다.
익명(211.109)2023-01-20 12:40
그건 왜그럴까?
익명(211.109)2023-01-20 12:41
구현하는 사람마다 버튼을 눌렀을때에 대한 동작을 각각 다르게 구현할거기 때문이다.
익명(211.109)2023-01-20 12:41
그렇기 때문에 버튼을 눌렀을때에 대한 세부 동작은 빼놓은거임
익명(211.109)2023-01-20 12:41
이정도로만 감을 잡아놓고 인터페이스를 사용하는 이유는 저렇게 내가 어떤 동작을 해줄수는 있는데 각각 그 세부내용을 어케 구현하게 될지는 모를때 인터페이스로 만들어서 구현자한테 위임하는거다.
익명(211.109)2023-01-20 12:42
프로그래밍에는 결합도라는 것이 있는데 저 인터페이스라는 (빈칸 너가 알아서해)를 쓰면 결합도(콘크리트)를 줄이고 유연한 프로그램을 만들 수 있게된다.
익명(211.109)2023-01-20 12:43
다형성, 다중상속 이런건 지금 생각할 필요도 없다. 너가 필요하다고 느껴지면 그때 다 깨닫게 되는거다. 지금 스트레스 받을 필요가 없어.
익명(211.109)2023-01-20 12:44
답글
인터페이스가 다형성 다중상속때문에 필요하다 이런말을 신경쓰지 말란뜻임
익명(211.109)2023-01-20 12:44
여기까지 잘 알았으면 너가 지금 이해를 못하는 이유와 마지막 결론을 말해준다.
익명(211.109)2023-01-20 12:44
답글
어렵당...ㅇㅅㅇ;;
익명(dsk695861)2023-01-20 12:46
너가 지금 객체지향 설계에서 한단계 더 심도있게 들어가서 고민해야되는 클래스간의 결합도를 줄이고 코드간의 종속성을 줄이기위한
유연한 설계에 대한 부분을 생각하고 있는데..
지금 너가 고민할 단계가 아니라는거다.
안드로이드SDK나 아이폰SDK 혹은 국내 외부 업체들이 개발사에게 제공하는 광고관련 SDK등등..
이렇게 내가 무언가 SDK나 라이브러리를 만들어서 사용자에게 배포해야되는 상황이 된다면
그제서야 인터페이스 제네릭등등 여러가지 변수에 대응하기 위한 설계에 대해 고민하게 되는데
그때 인터페이스가 왜 필요한지 스스로 깨달을거다.
지금 그 단계가 아니기 때문에 모르는거라서 그냥 뭐구나 하고 넘어가면 된다.
계층적 구조 없이 자바의 다형성을 이용할 수 있어서
뭔 말인지 모르겠어...ㅇㅅㅇ
인터페이스(추상메서드로만 이루어진 클래스) 왜 쓰는거? == 추상메서드로만 이루어진 클래스를 왜 씀? -> 추상메서드가 어떻게 돌아갈 지 상상(선언)만 미리 해놓고 코딩할때 좋음. 난 걍 상상 속의 메서드 이용해서 메인파트 코딩할 때, 상상에 대한 진짜 구현은 다른 동료가 해줄 수 있음. 협업에 용이함 -> 근데 추상메서드 쓰는거면 걍 추상클래스 쓰면 되는거 아님? == 그럼 인터페이스랑 추상클래스는 각각 언제 쓰이는데? -> 추상클래스는 상속받아서 써야해서 계층적구조를 따를 수 밖에 없음. 반면에 인터페이스는 계층적 구조를 벗어나서 서로 다른 두 클래스의 관계를 지어줄 수 있음
오호... 그니깐 추상메서드로만 이뤄졌다는 점에서 추상클래스와 인터페이스는 그 역학이 매우 비슷하지만, 계층적 구조를 따라야만 쓸 수 있는 추상클래스와 달리 인터페이스는 계층적 구조에서 벗어난 상황에서 쓸 수 있게 만들어준다는거네ㅇㅅㅇ. ㄳㄳ
코드의 재활용이요
어떻게 재활용이 가능하다는 거임?
해당 인터페이스를 파라미터로 받는 코드가 있으면 해당 인터페이스 구현만 하면 온갖곳에서 다 사용할 수 있지
인터페이스가 구현 객체의 추상메소드를 모두 가지고 있어야만 사용가능하겠넹 ㅇㅅㅇ
인터페이스 분리 원칙
어디 쓰는지 모르면 디자인패턴 책 봐라 거기 보면 예제 줄줄 나온다
ㄳㄳ
다형성은 실무 안해보면 필요성 느끼기 어렵긴 함
인터페이스 ㅈㄴ 좋은데
여기 댓글들 다 두리뭉실하네... 하긴 뭐 학교나 책에선 다 대충 두리뭉실하게 이야기 해줌
애초에 질문 자체가 너무 광범위하고 말 할 건덕지가 많아서 진짜 제대로 답변할려면 a4 몇장 채워야해ㅋㅋ
아니 그게 아니지
인터페이스의 사용 이유는 하나로 보면 된다. 오히려 인터페이스라는 말보다 아이폰 오브젝트C 해봄? 거기에서 딜리게이트(Delegate) 위임이라는 개념으로 생각해야 더 쉽다. 자바의 swing으로 버튼을 만들어봤겠지? 거기에 보면 JButton btn = new JButton("Click"); btn.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ // 동작 구현 } }
이런식으로 버튼의 동작을 등록해서 세부 내용을 구현할수가 있다
저 이벤트의 액션퍼폼드 내용 안에는 비어 잇어 너가 직접 오버라이딩 해서 채우는거다.
즉, 자바의 swing 프레임워크를 만든 제작자들은 버튼의 동작을 해주는 부분만 구현을 해놓고 속 알맹이 버튼을 동작시켰을때 어떤 작업을 할지는 빈칸으로 놔둔거다.
그건 왜그럴까?
구현하는 사람마다 버튼을 눌렀을때에 대한 동작을 각각 다르게 구현할거기 때문이다.
그렇기 때문에 버튼을 눌렀을때에 대한 세부 동작은 빼놓은거임
이정도로만 감을 잡아놓고 인터페이스를 사용하는 이유는 저렇게 내가 어떤 동작을 해줄수는 있는데 각각 그 세부내용을 어케 구현하게 될지는 모를때 인터페이스로 만들어서 구현자한테 위임하는거다.
프로그래밍에는 결합도라는 것이 있는데 저 인터페이스라는 (빈칸 너가 알아서해)를 쓰면 결합도(콘크리트)를 줄이고 유연한 프로그램을 만들 수 있게된다.
다형성, 다중상속 이런건 지금 생각할 필요도 없다. 너가 필요하다고 느껴지면 그때 다 깨닫게 되는거다. 지금 스트레스 받을 필요가 없어.
인터페이스가 다형성 다중상속때문에 필요하다 이런말을 신경쓰지 말란뜻임
여기까지 잘 알았으면 너가 지금 이해를 못하는 이유와 마지막 결론을 말해준다.
어렵당...ㅇㅅㅇ;;
너가 지금 객체지향 설계에서 한단계 더 심도있게 들어가서 고민해야되는 클래스간의 결합도를 줄이고 코드간의 종속성을 줄이기위한 유연한 설계에 대한 부분을 생각하고 있는데.. 지금 너가 고민할 단계가 아니라는거다. 안드로이드SDK나 아이폰SDK 혹은 국내 외부 업체들이 개발사에게 제공하는 광고관련 SDK등등.. 이렇게 내가 무언가 SDK나 라이브러리를 만들어서 사용자에게 배포해야되는 상황이 된다면 그제서야 인터페이스 제네릭등등 여러가지 변수에 대응하기 위한 설계에 대해 고민하게 되는데 그때 인터페이스가 왜 필요한지 스스로 깨달을거다. 지금 그 단계가 아니기 때문에 모르는거라서 그냥 뭐구나 하고 넘어가면 된다.