묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨오브젝트 - 기초편
DIP vs OCP
다른 질문 답변에 DAO에 인터페이스를 사용하는 이유DAO에 인터페이스를 사용하는 이유는 다양한 DAO 구현체를 제공하기 위해서가 아니라 의존성을 끊기 위해서입니다.이렇게 답변을 하신게 있는데, 그렇다면 DAO에 인터테이스를 사용하는 주된이유는 SOLID원칙 중 DIP원칙을 통해서 의존성을 끊기 위해서라고 이해를 했습니다그런데 OCP와 DIP가 의미적인 부분에서 일맥상통하는 부분이 있는 것 같기도 하고,, 좀 구별하기가 어려운 것 같습니다추가적으로 같이 달아주신 블로그 링크도 확인했지만 여전히 모호한 것 같습니다둘다 인터페이스를 통해서 구현을 할 수 있지만 OCP는 다양한 DAO구현체를 제공하기 위한 것에 초점을 맞춘 것이고, DIP는 의존성을 끊기 위한 것에 초점을 맞춘 것이라고 이해하면 될까요흠,, 명확하게 이해하진 못한 것 같습니다 어떻게 이해해야될까요..?!
-
미해결김영한의 실전 자바 - 기본편
객체지향관련 질문입니다
안녕하세요 선생님 , 자바에 대해 깊이 학습하고자 다시 기초부터 배우고있는 주니어 개발자입니다. 다름이 아니라 현재 목차에서 데이터와 기능들이 분리되어 있는것은 유지보수 관점에서 힘들기때문에 그 둘을 묶기위한 설계가 객체지향이라고 이해를 했는데요. 스프링 관점에서 보면 데이터의 무결성을 지키기위해 데이터(dto) 와 서비스는 분리하는 설계를 하는것으로 알고있습니다. 일반 자바와 스프링은 조금 다른 시각으로 바라봐야 할까요?
-
해결됨오브젝트 - 기초편
실제로 객체지향으로 설계를 많이 하는지 궁금합니다.
먼저, 강의 너무 잘 들었습니다. 너무 좋은 내용을 압축적으로 전달 받았습니다. 감사합니다. 강의를 듣고 나니, 두 가지가 인상깊었는데요.객체를 사용한다고 해서 객체 지향이 아니구나. 객체를 사용하더라도 절차지향적으로 설계할 수 있다.객체지향 설계를 제대로 하다보면, DDD를 자연스레 실천하게 된다. (DDD 패턴을 적용하는 것은 아님) 실제 사용 중인 코드를 보니, Service 객체가 비즈니스 로직을 왕창 들고 있더라구요. 클래스의 인스턴스도 객체보다는 데이터에 가까웠습니다. 데이터만 담고 있고, 데이터를 조작하는 로직은 모두 Service가 들고 있었어요. "그동안 절차지향적으로 코드를 작성했던거구나!"를 알게 되었습니다. 그러면서 문득, 강사님 블로그에서 봤던 글이 생각났는데요. [도메인 주도 설계의 본질](https://eternity-object.tistory.com/26)이라는 글의 마지막 부분입니다.아마 모든 소프트웨어 애플리케이션의 95%는 “DDD를 적용하기에 적절하지 않은” 범주에 속할 것이다. 대부분의 소프트웨어는 근본적으로 데이터 중심적이다. 여기서 말씀하시는 "데이터 중심적"이라는 것이, 데이터를 먼저 설계하고 프로세스를 나중에 설계하는 절차지향적 설계를 말씀하신 것인지가 궁금했습니다. 제가 이해한 바가 맞을까요? 적고보니 질문을 위한 사족(?)이 길었군요. 답변 주시면 감사하겠습니다 :)
-
미해결스프링 핵심 원리 - 기본편
ApplicationContext @Autowired관련 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요.providerTest()를 할때 new AnnotationConfigApplicationContext(ClientBean.class, PrototypeBean.class) 를 하면서 스프링 컨테이너를 생성한다는것 까지는 이해가 됐습니다. 저는 여기서 스프링컨테이너에 ClientBean, PrototypeBean 모두가 등록이 되어야 스프링컨테이너가 완성되는거라고 생각했습니다. 하지만 ClientBean을 빈으로 등록하려면 @Autowired로 ApplicationContext를 주입받아야 빈으로 등록이 되는건가요? 만약 그렇다면 ClientBean을 빈으로 등록할당시에는 AnnotationConfigApplicationContext가 아직 완성되지않아서 @Autowired에 주입할 수 없을것같아서 이부분이 이해가 가지않아 질문드립니다. 아니면 빈등록을 할때는 의존관계 주입까지 끝내는게 아니라 빈으로 등록할 class정보만을 받고 그 이후에 의존관계를 주입하는걸까요? 정확한 작동원리가 궁금합니다
-
미해결김영한의 실전 자바 - 중급 2편
LinkedHashSet 수업
LinkedHashSet 을 수업중에 HashSet 처럼 자세히 다룬 적이 있나요? 아무리봐도 못 찾겠어서요! 왜 LinkedHashSet 이 입력한 데이터대로 출력하는지 코드를 통해 이해를 하고 싶습니다.
-
미해결김영한의 실전 자바 - 중급 1편
열거형 두번째 문제
안녕하세요 열거 타입은 매개변수로 못 쓰나요?? 빨간 불이 계속들어오는데 어떻게 해결하면 좋을까요? package class05EnumClass; public class AuthGradeMain { public static void main(String args[]){ AuthGrade[] authGradeList = AuthGrade.values(); for(AuthGrade grade : authGradeList){ printGrade(); } //AuthGrade authGrade 매개변수를 넣을때 에러가 발생 private static void printGrade(AuthGrade authGrade){ System.out.println(authGradeList); } } }package class05EnumClass; public enum AuthGrade { GUEST(1,"손님"),LOGIN(2,"로그인 회원"),ADMIN(3,"관리자"); private final int level; private final String description; private AuthGrade(int level, String description){ this.level=level; this.description=description; } public void getAuthGrade(AuthGrade authGrade){ System.out.println("레벨"+authGrade.level+"등급"+authGrade.description); } public int getLevel(AuthGrade authGrade){ return authGrade.level; } public String getDescription(AuthGrade authGrade){ return authGrade.description; } }
-
미해결김영한의 실전 자바 - 중급 1편
java중급 4강 레퍼클래스 로또 번호 생성기 문제
4강 레퍼클래스 로또 번호 생성기 질문 있습니다. package class04wrapperClass; import java.util.Random; public class Lottery { public static void main(String args[]) { //랜덤 생성자 선언 ==> 로또 값이 그때 그때 바뀜 Random random = new Random(); //로또 범위 지정 배열 int[] randomArray = new int[6]; //로또 배열에 로또 값 넣기 for (int i = 0; i < randomArray.length; i++) { int randomValue=random.nextInt(45)+1; randomArray[i]=randomValue; if (randomArray[i]==randomArray[i++]||randomArray[i]==0) randomArray[i]=random.nextInt(45)+1; } for(int i =0; i<randomArray.length; i++){ System.out.print(randomArray[i]+" , "); } } }이렇게 풀었는데 이것도 올바른 풀이 일까요???
-
해결됨김영한의 실전 자바 - 기본편
메서드 메모리 구조
안녕하세요. 이전 7강의 메모리 구조와 헷갈리는 부분이 있어서 질문드립니다. 7강의 자바 메모리 구조에서는 다음과 같이 메서드는 공통됐기 때문에 메서드 영역에서 관리한다고 이해했습니다. 그러나 상속 부분에서는 힙영역에서 메서드를 관리하고 사용하는 것처럼 되어있어서 헷갈립니다. 설명을 편리하게 하고자 이렇게 설명하신 걸까요??잘못 이해한 부분이 어딘지 모르겠습니다 ㅠㅠ 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
@Test @DisplayName 안됨
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]위 두개를 임포트해도 오류가 뜹니다
-
해결됨오브젝트 - 기초편
DAO 관련 질문드립니다
안녕하세요 좋은 강의 감사합니다! ReservationService에서 xxDAO를 인터페이스로 선언한 부분에서 질문드립니다. 아래와 같이 여러 persistence 클래스를 같이 사용하는 경우 결합도를 낮추려면 xxxDAO 구현체 내부에 jpaRepository, querydslRepository, jdbcRepository를 주입받는 것이 좋을까요?(이렇게 하면 xxxDAO를 인터페이스로 선언할 필요가 있나 고민도 됩니다)public class xxxService { JpaRepository jpaRepository; QueryDslRepository queryDslRepository; JdbcRepository jdbcRepository; }
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
인텔리제이 scanner 한글입력 안됌
이클립스에선 한글입력이 되는데 인텔리제이는 왜안될까요 ㅠㅠ
-
미해결스프링 핵심 원리 - 기본편
애노테이션 기반 빈 자동 등록 / OCP 위반에 대해
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]학습을 통해애노테이션 기반 빈 등록에서1. @Configuration 을 통한 수동 등록@Conponent 와 @ComponentScan 을 통한 등록 방법이 있다는 것은 알았습니다.자동 등록의 경우, 결국 클라이언트 코드를 수정할 일이 발생하니 OCP 위반이고, 편의성을 위한 트레이드 오프라는 것도 표면적으론 알겠는데요..실무에서는 두개 섞어서 쓰게 되나요?아님 불편해도 객체지향 원칙에 부합하는 수동 등록하게 되나요? 특정 버전 이후부턴 자동 vs 수동 = 수동 win 에서자동 vs 수동 = 오류! 라니까 뭐가 더 적합한지 헷갈립니다.
-
미해결김영한의 실전 자바 - 중급 1편
pdf 학습자료 5.열거형 문제풀이2 정답코드오류
[질문 내용]5.열거형 pdf 파일 32페이지에 문제풀이2의 정답 코드에 findByCode 메서드의 실행블럭 첫번째 줄에 HttpStatus[] values = values(); 코드가 누락된거같아요
-
미해결김영한의 실전 자바 - 중급 2편
<> 유무
MyLinkedListV3 stringList = new MyLinkedListV3<>();에서는 <> 가 있어야 하는데 왜 MyLinkedListV3 stringList = new MyLinkedListV3[CAPACITY]; 에서는 <> 를 쓰면 안되는지 궁금합니다.
-
미해결김영한의 실전 자바 - 중급 2편
6강 해시 충돌 구현
2:30 를 보면 영한님께서 해시 테이블에서 Linkedlist 를 전체 버킷의 컨테이너로 사용하셨는데, ArrayList 를 전체 버킷의 컨테이너로 사용해도 전혀 문제가 없지 않나요 ?따라서, 해시 테이블에서 ArrayList를 전체 버킷의 컨테이너로 사용하고, 각 버킷 내에서는 LinkedList를 사용해 충돌을 처리하는 방법도 괜찮지 않나요 ?
-
미해결스프링 핵심 원리 - 기본편
프로젝트 생성 오류
강의 내용 그대로 따라했는데 강사님은 다운로드 하고 build.gradle 을 누르면 바로 인텔리제이로 이동되는것같은데 저는 인텔리제이로 열어지지가 않고 자꾸 비주얼스튜디오코드로 열립니다. 제가 인텔리제이에서 따로 들어가서 설치를 하거나 설정을 해야할것이 있는걸까요? 강의 처음부터 놓치지 않고 따라하고 있는데 안되니까 몇시간째 너무 스트레스를 받고있는 상황입니다.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
프록시 패턴 vs 데코레이터 패턴
섹션11에서 프록시에 대한 설명이 있는데요, 제가 알고 있는 데코레이터 패턴과 완전히 동일한 거 같은데 둘간의 차이점은 뭐라고 봐야하나요?
-
해결됨Readable Code: 읽기 좋은 코드를 작성하는 사고법
이 비디오에서 말씀해주신 것들을 적용하는데 어려움이 있습니다.
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 사실 제 개인의 문제는 아니고 이걸 팀 단위의 규칙으로 가져가기엔 현재 다니는 회사에서 다른 분들을 설득하는데에서 늘 어려움에 부딪히는데요. 이러한 상황에서는 우빈님은 어떻게 팀원들을 설득하셨나요?
-
미해결김영한의 실전 자바 - 중급 2편
Comparable이 아닌 Comparator를 사용하는 경우
이 부분에서 '기본 정렬 외에 다른 정렬 방법을 사용해야 하는 경우'가 잘 이해가 되지 않는데요. 예를 들어, MyUser에서 age는 int형이라서 '<' 비교 연산이 가능하지만 id는 String이라 비교 연산을 할 수 없기 때문에 Comparable이 아닌 Comparator를 사용하는 건가요?'기본 정렬 외에 다른 정렬 방법을 사용해야 하는 경우'가 이러한 경우를 의미하는 건가요??만약 그렇다면 SortMain2에서 AscComparator, DescComparator를 Comparable이 아닌 Comparator로 구현한 이유가 무엇인가요?
-
해결됨Readable Code: 읽기 좋은 코드를 작성하는 사고법
Optional 질문이 있습니다.
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. Spring Data JPA를 사용할 때 Repository에서 단일 엔티티 객체를 반환받을 때 옵셔널로 무조건 감싸는데 이러한 것도 Optional의 비용을 생각하지 않고 남발하는 경우 일까요?