묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
구상클래스에서 인터페이스 변수를 선언한 이유가 혹시 다형성과 관련이 있나요?
클래스의 상속과 관련된 다형성은 부모객체로 인스턴스를 생성하여 부모클래스의 메소드와 자식클래스 메소드 2가지를 업/다운캐스팅하여 자유롭게 호출할 수 있지만, 단일상속이라는 한계때문에 다른 부모클래스의 메소드는 호출할 수가 없잖아요? 그래서 인터페이스가 존재하는 이유구요.마찬가지로, 인스턴스를 생성할 때 다형성을 활용하여 인터페이스 객체(부모 객체)로 생성할 수는 있지만, 이것은 ISP(Interface Segregation Principle)원칙에 따라 detect(), report() 2개의 메소드를 호출하려면 Detectable, Reportable 객체 2개를 생성해야 하기 때문에 메모리가 효율적으로 관리되지 못하는거구요. 따라서 구상클래스인 FactoryCam에서 인터페이스 변수를 직접 생성하고 setter함수로 필요한 인터페이스 변수를 주입한 다음(Dependency Injection) , 주입당한 객체는 인터페이스에 의존하기 때문에(Reportable, Detectable) 동시에 기능이 다른 2가지 메소드를 호출할 수 있는거구요.(Dependency Inversion Principle) ... 과정을 이해하였지만 말로 풀어내니까 굉장히 장황하군요 사실 이 부분은 인터페이스 문법이라기보다는 디자인 패턴과 관련이 있지 않나싶습니다.
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
추상클래스 (abstract class)와 인터페이스(interface)의 최적의 쓰임?
안녕하세요 나도코딩 선생님...ㅎ몇 주전에 나도코딩 자바편 강의를 완강하고 다시 2회차로 강의를 듣는 중입니다...ㅎ추상 클래스 (abstract class)와 인터페이스(interface) 관련 강의를 들으면서 각각의 특징들 및 차이점들에 대해서 다시 조금씩 알아가고 있는데... (예를 들면, 추상클래스는 abstract 키워드를 가지고, abstract메소드를 가지고 있어서 객체를 생성할 수 없는 반면, 인터페이스(interface)는 보통 -able 키워드, 변수 X, 생성자 X, 오로지 메소드만 있다 등)이 둘, 그러니까 추상 클래스 (abstract class)와 인터페이스(interface)는 '어느 때 (또는 어느 시점)'에 활용하는게 가장 적절한지 디테일하게 알 수 없을까요?항상 좋은 강의와 답변 감사합니다...ㅎ
-
해결됨나도코딩의 자바 기본편 - 풀코스 (20시간)
추상클래스, 인터페이스에 대해 질문이 있습니다!
제가 정리한 내용은 추상클래스는 new 클래스를 통해 직접 객체를 생성할 수 없으며, 상속을 위한 클래스이고인터페이스는 구현체에 대한 메소드를 오버라이드 하는 것으로 이해하였는데.. 첫번째 질문은 두 개의 역할이 중복되는 것이 아닌지에 대한 질문입니다. 두 개의 역할 모두 구현체에게 메소드를 주입하는 것인데 굳이 구분한 것인지에 대한 질문입니다.두번째 질문은 일반 클래스의 상속이 있는데 굳이 추상클래스를 사용 하는 점 입니다. 제 생각으로는 부모 객체의 사용을 막기 위해 추상클래스로 변경을 한 것인지? 아니면 다른 이유가 있는 것인지에 대해서도 궁금합니다.
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
JDBC와 Connection 인터페이스 질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.각각의 데이터베이스마다 커넥션을 연결하는 방법, SQL을 전달하는 방법, 결과를 응답받는 방법이 모두 다르기 때문에 JDBC 인터페이스가 등장하였다고 하셨습니다.Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD); 이 부분을 통해서는 라이브러리에 등록된 DB 드라이버 목록에서 커넥션을 지원하는 드라이버에서 커넥션을 얻을 수 있다고 하셨습니다. 커넥션 또한 인터페이스이기에, 지원하는 드라이버로부터 실제 구현된 커넥션을 얻을 수 있는 것으로 이해했습니다.Connection, Statement, ResultSet 모두 속성을 확인해보니, 모두 다 인터페이스였습니다.그렇다면 JDBC는 Connection 인터페이스, Statement 인터페이스, ResultSet 인터페이스가 있는 인터페이스의 모음이라고 생각하면 될까요?DriverManager.getConnection(URL, USERNAME, PASSWORD); 로부터 데이터베이스 드라이버를 받는데, 그렇다면 이 코드를 통해서 JDBC 드라이버를 받는 것이라고도 할 수 있나요? (JDBC의 구현 드라이버를 받는 과정도 이 과정에서 이뤄지는지 궁금합니다.)
-
미해결스프링 핵심 원리 - 기본편
Service 구현체와 DIP
DIP를 지키려면 클라이언트는 구현 클래스가 아닌 인터페이스에 의존해야 하는 것으로 알고 있습니다. 때문에 프로젝트에서 컨트롤러는 구현체가 아닌 인터페이스를 호출해서 인터페이스의 기능을 사용하고 서비스 레이어에서 구현 객체를 만드는 식으로 프로젝트를 진행했습니다. 프로젝트를 얼추 마무리하고 리뷰하는 과정에서 인터페이스에 대해 재고하게 되었고 이 과정에서 '기능의 확장 가능성이 없는 메서드까지 추상화를 해야 하나?' 라는 의문이 들었습니다. 인터페이스는 자바의 다형성을 살려 기능의 확장의 필요한 순간 새로운 구현체로 기능을 확장하는데 의의가 있다고 생각하는데 기능의 확장이 필요하지 않을 때는 인터페이스로 굳이 추상화 과정이 필요없다는 생각이 들었습니다. 근데 이렇게 프로그램을 리팩토링하게되면 DIP가 깨진다는 생각이 들었습니다. 결국 추상화를 하지 않는다는 것은 컨트롤러에서 직접 구현 클래스를 가져온다는 것인데 이건 인터페이스를 의존하는 것이 아니기 때문입니다. 때문에 추상화가 필요없으면 구태여 하지 않는 방향이 좋은 것인지 DIP를 깨지 않기 위해 의미없는 추상화라도 필요한 것인지 궁금합니다.
-
해결됨C#과 유니티, 실전 게임으로 제대로 시작하기 (저자 직강)
인터페이스 접근제한자
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 선생님 강의 정말 재밌게 잘 보고있습니다. 강의 3.2 인터페이스에서 강의시간 6:00때 빨간밑줄이떠서 인터페이스를 장착한 클래스의 멤버에 public 붙여주니까 빨간밑줄이 사라졌는데 어떤 원리로 되는건지 잘 모르겠습니다. 저는 public 오류길래 public은 모두에게 공개하는거니까 인터페이스를 장착한 곳에서 사용할 수 있도록 인터페이스의 멤버에 public을 붙여주면 되겠다고 생각했거든요 혹시 인터페이스는 단순히 추상만 해놓아서 제대로 구현이 안되어 있는 곳이니까 인터페이스내에 있는 멤버에 public을 붙여도 기능을 제대로 못해서 인터페이스를 장착한 곳에서 접근제한자를 붙이는 건가요? 그리고 꼭 public을 붙여야 하는건가요? 인터페이스를 장착한 곳가서 장착한 인터페이스를 오른쪽 클릭하고 '빠른작업 및 리팩터링' 누르니까 자동완성기능으로 public이 붙어서 나오더라고요.
-
미해결
피그마 프로토 타입 스크롤 인터페이스 관련 문제 질문드립니다.
피그마로 어플리케이션을 만들려고 하고 있는데 스크롤 기능을 집어 느려고 하는데 다른 사람들과 다른 인터페이스로 인해 진행을 못하고 있는 상황입니다 이럴때에는 어떻게 해야하는지 궁금해서 질문 남깁니다. 알려주시면 감사하겠습니다.
-
해결됨이펙티브 타입스크립트 스터디
선언된 인터페이스를 Map자료형의 타입으로 할당할 수 있는 방법이 있을까요..?
만약에 User라는 인터페이스가 이미 존재하는 상태에서 const userMap = new Map<?>(); 과 같은 데이터에 일반 객체형 인터페이스를 할당할수 있는 방법이 있을까용?..
-
미해결타입스크립트 입문 - 기초부터 실전까지
Map의 제네릭에 일반 인터페이스를 할당할 수 있나요?
interface ITest { id: number; name: string; isRole: boolean; } const userMap = new Map<ITest>(); 선생님 안녕하세요! 타입스크립트 공부중에 데이터자료형에도 사용해보고싶은데 위처럼 interface로 선언한것을 Map에 할당하고싶으면 어떻게 하면 좋을까요..?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
인터페이스 사용하지 않으신 이유..?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내ㅎ용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 강의 따라 쳐보다 문득 궁금해져서 질문을 남기게 되었습니다. 제목 그대로 인터페이스를 사용하지 않고 다 구현을 하셨는데 예제이기 때문에 일부러 생략하고 사용하신건지.. 아니면 이렇게 구현하는 의도가 무엇인지 잘 몰라서 질문을 남깁니다..!
-
미해결타입스크립트 입문 - 기초부터 실전까지
공식문서에 가능한 한 "인터페이스"를 사용하라고 적혀있는데
안녕하세요. 캡틴판교님 강의영상 잘 보고 있는 구독자입니다. 이번영상에 마지막 부분에서 제목과 같이 공식문서에 가능한한 "인터페이스"를 사용하라고 언급되어 있다고 말씀하셨는데요.. 목차를 보니 앞으로 들어야 할 강의가 다 "타입"과 관련된 강의밖에 없어서요. 아직 다 보진 못했지만 이정도면 "타입"위주로 코드를 만들어야 하는 거 아닌가 생각에 궁금하여 질문드립니다. 타입과 인터페이스 분명 역할은 다를거라 생각은 하고 있지만. 권장하는 "인터페이스"에 비해 타입에 대해서 커리큘럼을 이렇게 많이 잡은 이유가 있을까요?
-
미해결스프링 핵심 원리 - 기본편
안녕하세요. 이번강의를 들으며 복습하다 질문이 있어 적게 되었습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요. 이번강의를 들으며 복습하다 질문이 있어 적게 되었습니다. (1) 역할과 구현 그리고 클라이언트 역할 : 인터페이스 구현 : 인터페이스를 구현한 클래스, 구현 객체 수업 중간중간 클라이언트 코드라는 단어가 등장하게 됩니다. ex) 클라이언트 코드가 DiscountPolicy 추상화인 인터페이스에만 의존하도록 변경 ex) 클라이언트 코드 변경없이 기능확장한다. - 질문으로, 이때 클라이언트 코드 클라이언트는 어떠한 것을 의미하는걸까요? - 화면에 띄어주는 View를 의미하는걸까요? (2) MemberServices는 인터페이스에 의존한다. public interface MemberServices{} => MemberServices는 인터페이스를 사용한다 라는 뜻일까요?? (3) 구체 클래스는? 구체 클래스란 concrete class를 의미하며, 구상 클래스 == 구현 클래스 == 구체 클레스 같은 뜻을 가진 단어일까요??
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
MemberRepository repository = new MemoryMemberRepository(); 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] MemoryMemberRepositoryTest 클래스에서 MemberRepository repository = new MemoryMemberRepository(); 해당 부분에 질문이 있습니다. 해당 인스턴스 자료형을 MemberRepository 라는 인터페이스로 한 이유가 있는지 궁금합니다. 마지막에 afterEach() 작성할 때 MemoryMemberRepository 로 자료형을 바꾸던데 처음부터 이렇게 썼으면 됐지 않나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
ItemServiceImpl.java 클래스를 만들지 않은 이유
강사님 안녕하세요, 강의를 듣다 궁금한 점이 있어서 글 올립니다. 보통 ItemService 같은 서비스 클래스는 구현체를 만드는 것으로 알고 있는데, 혹시 강의처럼 ItemServiceImpl 클래스를 안만들고 바로 구현해도 크게 문제되지는 않는건지 궁금합니다. (JPA라서 그런건지 아니면 예제이기 때문에 단순화 시키신건지 등 ..) 답변 부탁드리겠습니다! 감사합니다!!
-
미해결타입스크립트 입문 - 기초부터 실전까지
인터페이스 질문드립니다.
함수의 스펙을 인터페이스를 통해 정의를 해주었는데 함수를 선언할때 파라미터와 return값에 대한 타입을 또 정의하신 이유가 있으실까요??