묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결토비의 스프링 6 - 이해와 원리
클래스의 관심사는 하나인게 이상적인가요?
안녕하세요. 하나의 클래스는 무조건 하나의 관심사만 가지는 것이 좋나요? 여러 가지의 관심사를 가지는 경우는 무조건 피해야 하나요? 수업에서 Client가 두 가지 관심사를 가지고 있다고 하셨고 (PaymentService 이용해서 비즈니스 로직 처리 + PaymentService의 내부 의존관계 설정), 후자의 책임은 오브젝트 팩토리로 옮겨버리셨는데요. '하나의 클래스는 하나의 관심사만 처리하도록 코드를 짜는게 좋다'라고 이해해도 괜찮을까요? 하나의 클래스가 여러 가지 관심사를 가져도 되는 경우도 있는지 궁금합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
key value 값 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]key value에서 key값은 제가 임의로 설정해서 넘길수있는건가요??예를들어 지금 key의 이름이 data라고 되어있는데 그냥 key라고 설정하고 resourses에 있는 hello 파일에 있는 data를 key로 바꿔서 설정해도 괜찮나요??
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
synchronized가 붙은 메소드를 정말 동시에 접근하는 경우
[질문 내용]안녕하세요. 항상 좋은 강의 감사드리며 질문이 하나 있습니다. 멀티 코어라는 가정하에, synchronized가 붙은 메소드를 정말 동시에 호출하는 경우에는 어떤 스레드가 Lock을 가져가는지 궁금합니다. 정말 동시에 호출되면 두 스레드 모두 Lock을 획득할 수 있는지 조회할 때 획득할 수 있다고 조회가 될 것 같아서요.
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
BankAccountV5 lock.unlock() 작성 여부
BankAccountV5에서 lock.tryLoc()을 사용하는 경우, lock을 얻지 못하면 WAITING하지 않고 바로 return false;하므로 finally { lock.unlock(); }라는 코드가 필요 없을 것이라 생각했는데 이 코드가 꼭 필요한 코드인가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
member db 미생성 및 NullPointerException 문의
build.grade 파일application.yml 파일Member 파일MemberRepository 파일MemberRepositoryTest 파일Assertions.assertThat 가 안되는부분은 QnA를 통해 해결하였습니다.h2 데이터베이스 접속은 되는상태이며 실행시 member 테이블이 생성되지 않습니다.그리고 아래와 같은 NullPointerException 이 발생하여 문의드립니다.
-
미해결김영한의 실전 자바 - 중급 2편
문제 4번 관련 질문입니다.
public class ItemPriceTest { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("사과", 500); map.put("바나나", 500); map.put("망고", 1000); map.put("딸기", 1000); // 코드 작성 ArrayList<String> list = new ArrayList<>(); for (Map.Entry<String, Integer> entry : map.entrySet()) { if (entry.getValue().equals(1000)) { list.add(entry.getKey()); } } System.out.println(list); } } 여기서 entry.getValue() 의 비교를 == 으로 바꿔도 돌아가는데 상관없을까요? 객체의 경우 == 이냐, equals냐에 따라 동일성, 동등성 비교로 나뉘는거같은데 이와같이 값 비교 할 땐 둘 다 사용할 수 있는걸까요? == 을 사용해도 망고, 딸기가 출력되어 여쭤봅니다 [질문 내용]여기에 질문 내용을 남겨주세요.
-
해결됨실전 jOOQ! Type Safe SQL with Java
kotlin mapping error
안녕하세요! 강의 잘 들었습니다 ㅎㅎ자바 기반으로 강의해주신 내용을 바탕으로 코틀린으로 전환하여 다시금 학습하고 있습니다.그러던 도중 매핑 과정에서 에러가 발생하는 것을 발견하였는데 이와 관련하여 도움을 요청드리고자 합니다.fun findFilmWithActorList(page: Long, size: Long): List<FilmWithActor> { val FILM_ACTOR = JFilmActor.FILM_ACTOR val ACTOR = JActor.ACTOR return dslContext.select( FILM, FILM_ACTOR, ACTOR ) .from(FILM) .join(FILM_ACTOR).on(FILM.FILM_ID.eq(FILM_ACTOR.FILM_ID)) .join(ACTOR).on(ACTOR.ACTOR_ID.eq(FILM_ACTOR.ACTOR_ID)) .offset((page - 1) * size) .limit(size) .fetchInto(FilmWithActor::class.java) }코틀린에서 위의 코드처럼 TABLE.fields() 메서드를 사용하지 않으면 정상적으로 동작하지만,fun findFilmWithActorList(page: Long, size: Long): List<FilmWithActor> { val FILM_ACTOR = JFilmActor.FILM_ACTOR val ACTOR = JActor.ACTOR return dslContext.select( DSL.row(*FILM.fields()), DSL.row(*FILM_ACTOR.fields()), DSL.row(*ACTOR.fields()) ) .from(FILM) .join(FILM_ACTOR).on(FILM.FILM_ID.eq(FILM_ACTOR.FILM_ID)) .join(ACTOR).on(ACTOR.ACTOR_ID.eq(FILM_ACTOR.ACTOR_ID)) .offset((page - 1) * size) .limit(size) .fetchInto(FilmWithActor::class.java) }자바와 같이 TABLE.fields()를 사용하였을 때는 아래와 같은 에러가 발생하였습니다.Caused by: java.lang.NullPointerException: Parameter specified as non-null is null: method com.example.jooq.film.FilmWithActor.<init>, parameter film at com.example.jooq.film.FilmWithActor.<init>(FilmWithActor.kt)매핑에 문제가 있는 것 같아 아래와 같이 코드를 수정하였더니 정상 동작하였습니다.fun findFilmWithActorList(page: Long, size: Long): List<FilmWithActor> { val FILM_ACTOR = JFilmActor.FILM_ACTOR val ACTOR = JActor.ACTOR return dslContext.select( *FILM.fields(), *FILM_ACTOR.fields(), *ACTOR.fields() ) .from(FILM) .join(FILM_ACTOR).on(FILM.FILM_ID.eq(FILM_ACTOR.FILM_ID)) .join(ACTOR).on(ACTOR.ACTOR_ID.eq(FILM_ACTOR.ACTOR_ID)) .offset((page - 1) * size) .limit(size) .fetch() .map { record -> FilmWithActor( film = record.into(FILM).into(Film::class.java), filmActor = record.into(FILM_ACTOR).into(FilmActor::class.java), actor = record.into(ACTOR).into(Actor::class.java) ) } }DTO 클래스는 아래와 같습니다.data class FilmWithActor( val film: Film, val filmActor: FilmActor, val actor: Actor, ) { val filmId: Long get() = this.film.filmId!! val title: String get() = this.film.title val actorFullName: String get() = "${this.actor.firstName} ${this.actor.lastName}" }Film, FilmActor, Actor는 Flyway 기반으로 생성된 pojo 클래스들입니다. implicitPathJoin, explicitPathJoin 시에도 동일한 문제가 발생하여 문의드리고자 합니다 ㅜ 위의 방법처럼 매핑할 수 있지만, 가독성이 떨어지는 것 같아 혹시 다른 방법이 있는지 궁금합니다.또한 혹시 제가 놓친 부분이 있다면 알려주시면 감사합니다!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
localhost:8080이 다른 프로젝트에서 사용 중인 것같아요
안녕하세요~localhost:8080이 사용중인 것 같습니다.처음 테스트로 실행시키고 초기화까지 된 것 같은데해당 localhost로 들어가면 로그인 화면이 뜨네요...일전에 다른 강의 보다가 다른 프로젝트를 실행시켜서 그런 것 같네요어떻게 해결해야 할까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
h2 DB 연결시 Table not found
[질문 내용]섹션 6 JDBC 연결 과정h2 DB 연결 과정에서 h2 환경 구축, memebr 테이블 생성까지 에러없이 잘 됐구요. h2 콘솔에서도 테이블 확인 해 보면 잘 보입니다.근데 이제 강사님이 알려주신 방법대로 DB를 MemoryMemberRepository -> JdbcMemberRepository로 변경하는 과정에서 JdbcMemberRepository 클래스 파일과 SpringConfig 파일 코드 복붙 해왔는데 실행시키면 회원가입과 회원 목록 조회시 자꾸 member라는 테이블을 못찾는 오류가 뜹니다...ㅠ 왜 그런걸까요ㅠㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
h2.bat해도 실행이 안돼요 ..
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]자바 배치파일이 아니라고 뜨는데 왜이러는걸까요 ㅠㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
테스트시 DB 사용
안녕하세요, 강의를 듣고 있는 학생입니다. 강사님께서 강의 중에 언급해주신 거 같은데 제가 이해를 잘 못해서 다시 질문드립니다. 통합 테스트 시 이전 강의에서 쌓아 둔 데이터를 DELETE query를 통해서 없애고 진행을 했는데, 그렇다면 테스트 코드와 실제 코드가 같은 DB를 공유하고 있다고 봐도 되나요? 만약 같은 DB를 공유하게 된다면, 원래 있던 데이터를 항상 날려야 되는데 문제가 생긴다고 생각이 들어 제가 잘못 이해한 부분을 찾고 싶어 질문을 드렸습니다. 글 읽어주셔서 감사합니다.
-
미해결자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
31강 유저 정보 가져오기에서 질문 있습니다
유저 정보를 가져올 때 orElseThrow를 사용하면 userRepository에 입력되어 있는 findByName이 Optional로 선언되어야 한다고 문구가 뜹니다!근데 Optional<User>로 바꾸면 UserServiceV2에 @Transactional public void deleteUser(String name){ User user = userRepository.findByName(name); if(user == null){ throw new IllegalArgumentException(); } userRepository.delete(user); }user의 타입을 User로 할 수 없다고 떠서 Optional<User>로 바꾸면 userRepository.delete(user)가 파라미터가 적절하지 않다고 뜹니다ㅜㅜ일단, 구현은 하고 싶어서 userRepository에 findByName은 User 타입으로 정의하고// 4. 유저 정보를 가져온다 if(userRepository.findByName(request.getUserName()) == null){ throw new IllegalArgumentException(); } else{ User user = userRepository.findByName(request.getUserName()); // 5. 유저 정보와 책 정보를 기반으로 UserLoanHistory를 저장 userLoanHistoryRepository.save(new UserLoanHistory(user.getId(),book.getName())); }bookService를 이렇게 바꾸었는데 상관없을까요?어떤식으로 해결하는게 맞을까요...
-
미해결김영한의 실전 자바 - 기본편
기본형과 참조형 마지막 문제 풀이
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. scanner.nextLine();해당 코드를 for문 안에 String productName = scanner.nextLine();밑에 하나만 사용해도 정상적으로 동작하는데 이렇게 해도 상관없을까요?
-
미해결김영한의 실전 자바 - 중급 1편
불변객체 강의 중
강의 잘 듣고 있습니다~ 안녕하세요~불변객체 강의를 듣다가,memberB.getAddress().setValue("부산");memberB.setAddress(new ImmutableAddress("부산"));위 코딩문을 너무 자연스럽게 작성하셨는데 불변객체 앞 강의들 메모리구조는 이해가 됐는데이번 문장은 그림이 안그려져서요혹시 다른 분들은 쉽게 읽혀지셨나요 ㅠㅠ
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
jvm 구현에 따라 vs java 버전과 구현에 따라
notify / signal 차이점 설명하시면서1) java 버전과 구현에 따라 다르다.2) jvm 구현에 따라 다르다.라고 말씀하시는데, 이 둘간의 정확한 차이가 뭔지 궁금합니다. 제 지식으로는 아래 정도로 보이는데,1) java 라이브러리단에서 구현된 방식(=디컴파일을 통해 내부 로직을 알수있음, 컴파일러 버전에 영향)vs2) jvm 내부에 구현된 방식(=디컴파일해서는 내부 로직 알수없음, 컴파일러가 아닌 런타임에 사용된 java 버전에 영향)로 보면 되는가요? 1) java 구현: 컴파일시 사용된 java 구현체( .java -> .class 변환)2) jvm 구현 : 런타임에 사용되는 jvm 구현체?(.class 구동)
-
해결됨김영한의 실전 자바 - 중급 1편
Syout.out.println() string 우선순위 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요.cklee님의 질문을 도와주다가 저가 답변의 실수를 발견하여 수정하고 고친 다음에 다시 답변을 하였습니다.근데 코드를 고치다 보니까. 뭔가 이상한 것을 발견해서. 질문을 드립니다.A코드랑 B코드가 있는데, A의 syso는 문자열이 다 나오는데, B코드는 "()"를 안치니 false가 되던데..그 이유가 연산자의 우선순위 때문에 "글자 문자열 + str6" 을 하고 나서, "합친 str6 == str7" 이렇게 비교 되는 건가요?(질문을 하다 보니까 깨달아 지더라고요.)그리고 이 계기로 인하여 정확한 답을 해주는게 어렵다는것을 느끼게 되네요.공식서포즈님들 및 ,영한님 감사를 드립니다.답변 부탁드립니다.그리고 버그 있음.글이 이상해서 수정했는데. 이렇게 나옴..추가 그리고 몸이 아프거나 피곤 할때는 코드 여러번 보는게 좋네요..(코드를 보긴 했는데 정확히 제대로 안봄...)
-
미해결김영한의 실전 자바 - 중급 1편
불변객체 관련 질문드립니다.
같은 참조값을 사용하는 다른 스트링객체의 값이 변경 될수 있어 스트리잉 불변객체로 되어있다는것은 이해했습니다. 만약 스트링 풀에 hello java가있다면String str1 ="hello";String str2 = str1.concat(" java"); 이때 str2는 스트링 풀에있는 hello java의 참조값을 갖는걸까요?
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
오타 제보합니다
Executor 스레드 풀 관리 - 분석 강의에서 정리 - Executor 스레드 풀 관리부분에서 4번 큐도 가득차고, 풀에 최대 생성 가능한 스레드 수도 가득 찼다. 부분을 강의하시다가 '에'를 큐 앞으로 당겨버리셨어여 그래서 에 큐도 가득차고, 풀최대 생성으로 바뀌었습니다
-
미해결김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
수업에 사용하시는 메모 필기
수업에 사용하시는 필기 자료는 제공되지 않나요 ??
-
미해결김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성
오타 제보합니다 ^^
첫번째 PPT 프로세스와 스레드 소개의 3 페이지에 오타가 있어 제보합니다!