묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨Readable Code: 읽기 좋은 코드를 작성하는 사고법
정적 팩토리 메서드 of() 컨벤션
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 강의 중 정적 팩토리 메서드를 만드실 때 of()안의 파라미터가 없거나, 한 개 혹은 여러 개 일 때 모두 사용 하신 것 같아요유명 기술 블로그를 보면 https://tecoble.techcourse.co.kr/post/2020-05-26-static-factory-method/여러개의 파라미터를 통해 생성할 때 of를 쓰라고 되어있는데요, 이때 여러개 라는 말은 없거나, 한개 혹은 여러개 모든 경우를 포함하는 말 일까요?실제로 List인터페이스의 경우에서도 구분하지 않고 전부 of를 사용해서 맞는 것 같긴 한데 위의 블로그 표현과는 약간 다른 것 같아서 질문드립니다
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
ocp를 지키기 위해 enum vs interface
안녕하세요. 테스트 강의부터 좋은 강의 감사합니다.강의를 보던 도중에 궁금한 점이 생겨서 질문드립니다.OCP를 만족하는 GameLevel을 만들기 위해 enum도 비슷한 역할을 할 수 있는데 interface를 사용한 이유가 궁금합니다 !@Getter public enum GameLevel { BEGINNER(...), MIDDLE(...) private final int rowSize; private final int colSize; private final int landMineCount; }enum으로 구현 시 새로운 레벨의 추가가 GameLevel의 변화를 가져오기 때문인지..혹은 이를 구분하는 다른 기준이 있을지 궁금합니다.
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
의도한 예외와 의도하지않은 예외가 정확하게 무슨뜻인가요 ?
우선 강의 잘 듣고있습니다. 의도한 예외와 의도하지 않은 예외가 조금 헷갈리는데 제가 이해한 개념이 맞는지 여쭈어봅니다. 강사님께서 말씀하시는 의도한 예외는 개발자가 인지하고 Exception을 던지는 경우를 말씀하시고 의도하지 않은 예외는 개발자가 인지하지 못하고 Exception이 발생한다는 뜻일까요 ?? 그렇다면 잘짜여진 코드에서는 모두 의도한 예외가 되어야 되는건가요 ?? 의도하지 않은 예외를 사용하는 일은 없는건가요 ? 의도한 예외 - 개발자가 예상하고 처리한 예외의도하지 않은 예외 - 개발자가 놓치거나, 빼먹은 예외의도하지 않은 예외 발생시 의도한 예외로 바꾼다.이렇게 이해하면 될까요 ?
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
안녕하세요 private메소드에 대해서 질문 있습니다.
제가 헷갈려서 질문드려요!private 메소드를 만들게 된다면 무언가 책임이 이상하거나 설계가 잘못되었다는 신호로 알고 있는데요 private static void checkIfGameIsOver() { boolean isAllOpened = isAllCellOpened(); if (isAllOpened) { gameStatus = 1; }}만약 이런 메서드를 테스트 한다고 하면 어떻게 해야하는건가요?! private메소드를 현업에서도 사용하시는지 궁금합니다.그리고 제가 어디를 잘못알고 있는지도 궁금해요!
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
-
-
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
추상화 레벨
안녕하세요, 우빈님! 지금까지 열심히 따라오고 있는 학습자 1인입니다! 다름이 아니라 궁금한게 생겨서 질문을 하게 되었습니다. 추상화 과정을 거치면서 변수명도 변경하고 메서드 분리작업 및 추상화 레벨을 맞추는 실습을 하면서 읽기 좋은 코드 과정을 거치고 있는데 여기서 저는 주석을 이용하면 더 깔끔해지게 읽을수 있을것 같다는 생각이 있었습니다! 이 부분에 대해 강사님 생각을 듣고 싶습니다!강사님이 강의 중간중간 추상화 시켜야할 냄새가 난다는 표현을 하셨는데 저는 그 냄새가 잘 안 납니다! 혹시 냄새가 잘 날 수 있는 좋은 방법들이 있을까요? 해당 부분을 많이 해보면 될지 질문드립니다.
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
인프런 워밍업 클럽 커뮤니티 초대장 초대 링크 문제
인프런 워밍업 클럽 커뮤니티 초대장 초대 링크를 받았는데 디스코드에서 만료된 링크라 나오며 디스코드에 참여를 못하고 있습니다.
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
4:28 build.gradle 수정 시 kotlin-reflect관련 implementation 추가 해야할까요?
build.gradle에 plugin만 추가하니 오류나고 아래 내용이 추가되니 오류가 사라지고 정상 동작하였습니다.implementation "org.jetbrains.kotlin:kotlin-reflect"정확한 원인은 모르겠는데 contextLoads할때 부터 error가 나서 kotlin으로 만든 Book을 Entity로 인식하지 못하는 것 같았습니다. 이렇게 해결하는게 맞는건지 궁금합니다. windows10 / java11 / intellij 사용중입니다! [오류원문]Failed to resolve parameter [com.group.libraryapp.service.book.BookService bookService] in constructor [public com.group.libraryapp.service.book.BookServiceTest(com.group.libraryapp.service.book.BookService,com.group.libraryapp.domain.book.BookRepository,com.group.libraryapp.domain.user.UserRepository,com.group.libraryapp.domain.user.loanhistory.UserLoanHistoryRepository)]: Failed to load ApplicationContext org.junit.jupiter.api.extension.ParameterResolutionException: Failed to resolve parameter [com.group.libraryapp.service.book.BookService bookService] in constructor [public com.group.libraryapp.service.book.BookServiceTest(com.group.libraryapp.service.book.BookService,com.group.libraryapp.domain.book.BookRepository,com.group.libraryapp.domain.user.UserRepository,com.group.libraryapp.domain.user.loanhistory.UserLoanHistoryRepository)]: Failed to load ApplicationContext at app//org.junit.jupiter.engine.execution.ExecutableInvoker.resolveParameter(ExecutableInvoker.java:239) at app//org.junit.jupiter.engine.execution.ExecutableInvoker.resolveParameters(ExecutableInvoker.java:183) at app//org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:74) at app//org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestClassConstructor(ClassBasedTestDescriptor.java:355) at app//org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateTestClass(ClassBasedTestDescriptor.java:302) at app//org.junit.jupiter.engine.descriptor.ClassTestDescriptor.instantiateTestClass(ClassTestDescriptor.java:79) at app//org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:280) at app//org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:272) at java.base@11.0.24/java.util.Optional.orElseGet(Optional.java:369) at app//org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:271) at app//org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:102) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:101) at app//org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:66) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123) at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123) at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90) 이하 생략..
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
정적 팩토리 메소드 사용 이유
강의를 듣다가 갑자기 드는 질문이 있습니다.생성자를 private로 감추고 정적 팩토리 메소드를 사용해서 of나 from 이런식으로 만드시는데 왜 이렇게 하시는지 궁금합니다.정적 팩토리 메서드는 메서드 이름을 통해 생성의 의도를 명확히 전달할 수 있다고 하는데, 이것말고 또 사용 이유가 있으실까요 ??
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
게터
안녕하세요 강의 잘 보고 있습니다 게터에 대해 질문이 있어서 그런데 그럼 선생님께서는 실무에서 @Getter은 사용하지 않으시고 필드 하나하나 9분 36초처럼 수동으로 다 만드시나요?? 안쓰자니 코드의 양이 많아지고 쓰자니 코드의 양이 많아져 약간?은 복잡해 질 수도 있고... 감사합니다.
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
junit import 불가
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.build.gradle 설정은 이러합니다.에러는 이러합니다. 어떻게 junit를 잡나요? 따로 설정이 있나요?
-
미해결코딩으로 학습하는 리팩토링
.github 토큰 등록하는 방법에 대한 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.현재 강의를 들으려고 준비 단계인데 /Users/glen/Library/Java/JavaVirtualMachines/corretto-21.0.4/Contents/Home/bin/java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:50271,suspend=y,server=n --enable-preview -javaagent:/Users/glen/Library/Caches/JetBrains/IntelliJIdea2024.2/captureAgent/debugger-agent.jar -Dkotlinx.coroutines.debug.enable.creation.stack.trace=false -Ddebugger.agent.enable.coroutines=true -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath /Users/glen/Desktop/Study_File/refactoring/target/classes:/Users/glen/.m2/repository/org/springframework/boot/spring-boot-starter/2.6.1/spring-boot-starter-2.6.1.jar:/Users/glen/.m2/repository/org/springframework/boot/spring-boot/2.6.1/spring-boot-2.6.1.jar:/Users/glen/.m2/repository/org/springframework/spring-context/5.3.13/spring-context-5.3.13.jar:/Users/glen/.m2/repository/org/springframework/spring-aop/5.3.13/spring-aop-5.3.13.jar:/Users/glen/.m2/repository/org/springframework/spring-beans/5.3.13/spring-beans-5.3.13.jar:/Users/glen/.m2/repository/org/springframework/spring-expression/5.3.13/spring-expression-5.3.13.jar:/Users/glen/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/2.6.1/spring-boot-autoconfigure-2.6.1.jar:/Users/glen/.m2/repository/org/springframework/boot/spring-boot-starter-logging/2.6.1/spring-boot-starter-logging-2.6.1.jar:/Users/glen/.m2/repository/ch/qos/logback/logback-classic/1.2.7/logback-classic-1.2.7.jar:/Users/glen/.m2/repository/ch/qos/logback/logback-core/1.2.7/logback-core-1.2.7.jar:/Users/glen/.m2/repository/org/apache/logging/log4j/log4j-to-slf4j/2.14.1/log4j-to-slf4j-2.14.1.jar:/Users/glen/.m2/repository/org/apache/logging/log4j/log4j-api/2.14.1/log4j-api-2.14.1.jar:/Users/glen/.m2/repository/org/slf4j/jul-to-slf4j/1.7.32/jul-to-slf4j-1.7.32.jar:/Users/glen/.m2/repository/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar:/Users/glen/.m2/repository/org/springframework/spring-core/5.3.13/spring-core-5.3.13.jar:/Users/glen/.m2/repository/org/springframework/spring-jcl/5.3.13/spring-jcl-5.3.13.jar:/Users/glen/.m2/repository/org/yaml/snakeyaml/1.29/snakeyaml-1.29.jar:/Users/glen/.m2/repository/org/slf4j/slf4j-api/1.7.32/slf4j-api-1.7.32.jar:/Users/glen/.m2/repository/org/kohsuke/github-api/1.116/github-api-1.116.jar:/Users/glen/.m2/repository/org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.jar:/Users/glen/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.13.0/jackson-databind-2.13.0.jar:/Users/glen/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.13.0/jackson-annotations-2.13.0.jar:/Users/glen/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.13.0/jackson-core-2.13.0.jar:/Users/glen/.m2/repository/commons-io/commons-io/2.4/commons-io-2.4.jar:/Applications/IntelliJ IDEA.app/Contents/lib/idea_rt.jar me.whiteship.refactoring._01_smell_mysterious_name._01_before.StudyDashboardConnected to the target VM, address: '127.0.0.1:50271', transport: 'socket'Exception in thread "main" java.io.IOException: Failed to resolve credentials from ~/.github or the environment. at org.kohsuke.github.GitHubBuilder.fromCredentials(GitHubBuilder.java:76) at org.kohsuke.github.GitHub.connect(GitHub.java:137) at me.whiteship.refactoring._01_smell_mysterious_name._01_before.StudyDashboard.main(StudyDashboard.java:36)Caused by: java.io.FileNotFoundException: /Users/glen/.github (Is a directory) at java.base/java.io.FileInputStream.open0(Native Method) at java.base/java.io.FileInputStream.open(FileInputStream.java:213) at java.base/java.io.FileInputStream.<init>(FileInputStream.java:152) at java.base/java.io.FileInputStream.<init>(FileInputStream.java:106) at org.kohsuke.github.GitHubBuilder.fromPropertyFile(GitHubBuilder.java:200) at org.kohsuke.github.GitHubBuilder.fromPropertyFile(GitHubBuilder.java:184) at org.kohsuke.github.GitHubBuilder.fromCredentials(GitHubBuilder.java:68) ... 2 moreDisconnected from the target VM, address: '127.0.0.1:50271', transport: 'socket'라는 오류가 계속해서 발생하고 있습니다.자바 17버전을 사용할 경우 <compilerArgs>--enable-preview</compilerArgs> 를 사용할 수 없다고도 발생해서 21버전으로 진행중입니다 이것도 맞는지 알려주시면 감사하겠습니다.
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
static
안녕하세요 강사님그 매직넘버와, 매직스트링 강의와 이 강의를 들으면서 하나 느낀점이 있는데 상수로서 정리를하여 얻는 이득은 있으나 그만큼 static이 많아져서 메모리를 더 먹거나 다른 단점들이 존재하는것 같은점에 대해서는 어떻게 생각하시나요?? 그 단점들을 포기하면서도 얻는 이득이 많아서 이렇게 하시는편을 더 지향하시는지 궁금합니다감사합니다
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
강의 질문
안녕하세요 강사님테코 강의때 부터 시작해 강의 잘 보고 있습니다다름이 아니라 강의에서 '한 메서드의 주제는 반드시 하나이다' 라고 하셨는데 그럼 여러 메서드를 잘게 쪼개고 하나의 큰메서드로 묶는 방법(주제가 두개이상) 은 지양 해야 되는 방법일까요?감사합니다
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
안녕하세요 강사님 SRP에 관한 질문입니다!
이번 강의 내용과 관련하여 JPA를 사용하여 CRUD를 구현할 때 질문입니다! JPA를 이용한 간한단 CRUD를 구현할 때,POST와 USER Entity는 서로 연관관계 매핑이 되어있습니다. Post(게시글)을 작성한다고 가정하면 PostService에는 UserRepository를 사용하여 User객체를 얻어야 하는데, 이러한 경우 단일 책임 원칙 위반이라고 얘기할 수 있는 건가요? 댓글을 작성한다고 가정하면, CommentService에 UserRepository, PostRepository를 사용하여 User와 Post 객체를 얻어야 합니다. 제가 생각했을 때 이러한 경우 단일 책임 원칙이 위반 되었는지가 궁금합니다.게시글 작성, 댓글 작성이라는 행위에 다른 도메인이 침투해있으니까 단위테스트 작성도 어렵고 가독성이 떨어진다고 생각하는데, 맞을까요?그럼 2번을 개선하기 위해서는 어떻게 해야 되는지 궁금합니다. 너무 얘기가 길어지면 어떤 책or글을 참고하는게 좋을지 가르쳐주시면 너무 감사하겠습니다!!강사님 이전 테스트 코드 강의도 보고 지금 강의도 보고있지만 아직 너무 어려워서 따라가기가 힘드네요 ㅠㅠ....항상 감사합니다!
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
코드 작성 시 SOLID 원칙을 처음부터 준수해가며 작성하시는지, 아니면 개발 후 리팩토링을 통해 점진적으로 변경해 나가시는 편인지 궁금합니다.
안녕하세요, 강사님.강의 정말 유익하게 잘 듣고 있습니다. 강의를 보면서 기존에 작성된 로직에서 SOLID 원칙을 위반하는 코드들을 점진적으로 개선해 나가시는걸 보고 한가지 궁금한게 생겼는데요. 강사님께서는 코드를 작성할 때 위 원칙들을 처음부터 준수해 가시면서 작성을 하시는 편인지, 아니면 기능 구현에 우선 초점을 맞춰 코드를 작성하신 뒤 강의처럼 점진적으로 리팩토링을 해나가시는 편인지 궁금합니다. 이 원칙들을 준수해가면서 코드를 작성하는 버릇이 생기게 되면 전자의 방식이 가능해지는건가요? 지금 당장 생각했을 때는 아무리 원칙을 잘 이해한다고 하더라도 쉽지는 않을 것 같아서요. ㅜ 그리고 혹시 다음 강의 계획하고 계신게 있으신가요? ㅎㅎ
-
해결됨Readable Code: 읽기 좋은 코드를 작성하는 사고법
이 비디오에서 말씀해주신 것들을 적용하는데 어려움이 있습니다.
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 사실 제 개인의 문제는 아니고 이걸 팀 단위의 규칙으로 가져가기엔 현재 다니는 회사에서 다른 분들을 설득하는데에서 늘 어려움에 부딪히는데요. 이러한 상황에서는 우빈님은 어떻게 팀원들을 설득하셨나요?
-
해결됨Readable Code: 읽기 좋은 코드를 작성하는 사고법
Optional 질문이 있습니다.
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. Spring Data JPA를 사용할 때 Repository에서 단일 엔티티 객체를 반환받을 때 옵셔널로 무조건 감싸는데 이러한 것도 Optional의 비용을 생각하지 않고 남발하는 경우 일까요?
-
해결됨Readable Code: 읽기 좋은 코드를 작성하는 사고법
getter 질문드립니다
안녕하세요!예시에서 person.get지갑().get신분증().findAge() >= 19를 person.isAgeGreaterThanOrEqualTo(19) 메서드로 만들면person 내부에서 다시 지갑.get신분증().findAge() 형태가 되는데, 이 경우 지갑.isAge..(19) 같은 메서드를 계속 만드는지 끊어내는 기준이 있는지 궁금합니다.
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
이 강의를 수강하기 전, 수강 후 학습 질문입니다.
안녕하세요 우빈님 테스트 코드 강의도 정말 열심히 듣고 많은 것을 배워서 항상 감사하고있습니다!이번에 새로 나온 강의 관련해서 전과 후 어떤 학습을 진행하면 좋을 지 궁금합니다. 추천해주실 책이나 강의가 있을까요?