묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
강의 내용 정리 및 자료 제작 툴 문의 드립니다.
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 강사님 안녕하세요. 🙂 우선, 테스트 코드에 이어 양질의 강의 제공해 주셔서 감사합니다! 🙏🏻프로젝트 리팩토링 단계에서 본 강의를 접한 덕분에 많이 배우고 있습니다! 혹 제가 이해한 내용을 바탕으로 블로그 혹은 깃허브에 정리해도 될지요?출처는 기재할 예정이며, 블로그 수익과는 전혀 관계없습니다. 더불어 강의 자료 제작 시 사용하시는 드로잉 툴?이 어떤 것인지도 궁금합니다. 답변 기다리겠습니다, 감사합니다!
-
해결됨Python을 위한 디자인 패턴
노션링크
conceptual_singleton.py강사님 싱글톤패턴 드롭다운 코드예시 9:25 이부분 코드 예시가 펼쳐져 있지않아서 볼수가없네요.팩토리패턴 예시도 강의영상에서는 펼쳐져있지않네요.노션링크를 보면서 학습해야할 것같은데 어디있는지 모르겠습니다 ㅠ
-
미해결클린 코더스: 실전 객체 지향 프로그래밍과 TDD 마스터 클래스
13강, 책임을 나누는 기준
3분 43초경, 책임을 나누는 부류에서"누가 해당 메서드의 변경을 유발하는 사용자인가"가 기준이 된다고 하셨는데,메서드의 변경을 유발한다는 게해당 메서드를 누가 호출하느냐? 어떤 사용자가 이 메서드를 사용하냐? 이렇게 이해하면 되나요?메서의 변경을 유발한다는 의미가 해당 메서드를 이용한다는 의미인지? 정확히 메서드의 변경을 유발한다는 점이 무슨말인지 모르겠습니다.
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
사용할 변수 가깝게 선언하기 질문
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요. 강사님.강의 내용 중 사용할 변수는 가깝게 선언하기(4:40~6:25)에 대한 내용을 설명해주셨는데요. 해당 내용이 메서드에도 적용되는 또는 적용될 수 있는 내용인지 궁금합니다. 만약 코드가 엄청 길다고 가정하면 현실적으로 단축키를 활용하여 '선언 위치'로 갔다 되돌아와서 흐름을 이어 갈 것 같습니다. 그렇게 되면 가깝게 위치 하는 것이 큰 의미가 없을 것 같습니다.반면에 아래 예시처럼 짧다고 하면 사용하는 위치가 가깝다면 한 눈에 들어올 것 같은데요.메서드에는 크게 의미가 없는 부분인지? 아니면 적용하면 좋은건지 궁금합니다. public static void main(String[] args) { showGameStartComments(); initializeGame(); } private static void showGameStartComments(){} private static void initializeGame(){} public static void main(String[] args) { showGameStartComments(); initializeGame(); } private static void showGameStartComments(){} // 코드 20줄 (다른 메서드) private static void initializeGame(){}
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
오버 엔지니어링
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요. 우빈님인프런 워밍업 클럽 덕분에 우빈님 강의를 끝까지 수강 중에 있는 러너입니다! 오버 엔지니어링 강의에서 오버 엔지니어링을 경계하고 적재적소에 리팩토링 강의에서 배웠던 것들을 써야한다. 이건 '경험'의 차원이라고 말씀하셨는데 실무에서 객체지향으로 개발하지 않는 경우에는 따로 '경험'을 쌓아야하는데 우빈님 강의 외에 적절하고 정확한 경험을 쌓을 수 있는 방법이 따로 있을까요? 간접 경험이라도 충분히 쌓을 수 있을 만한 방법이 있다면 추천 부탁드립니다!
-
해결됨클린 코더스: 실전 객체 지향 프로그래밍과 TDD 마스터 클래스
org.fitness 라이브러리를 어떻게 받을 수 있나요
안녕하세요클린 코더스 강의보면서 예제를 따라해보고 있는데 초반 function 강의 예제에 필요한 org.fitness 라이브러리가 받아지지 않는거 같습니다. 클래스 파일이 없으니 컴파일 에러가 터지는데, 라이브러리 파일 구할 수 있는 방법 없을까요?maven repository:https://mvnrepository.com/artifact/org.fitness/fitness저장소:https://github.com/msbaek/fitness-example/tree/master
-
미해결클린 코더스: 실전 객체 지향 프로그래밍과 TDD 마스터 클래스
11. Null is not an error의 예제인 top 함수는 커맨드인가요 쿼리인가요??
안녕하세요. 좋은 강의 감사합니다. CQS에서 커맨드는 내부 구조를 변경하는데 반환값이 없고, 쿼리가 내부 구조를 변경하지 않고 반환값이 있는 것이라고 설명을 들었습니다. 그런데, 11. Null is not an error에서 예제를 든 스택의 top 메소드는 내부 구조를 변경함에는 커맨드 처럼 보입니다만, 값을 반환하므로 쿼리 처럼 행동합니다. 예제라서 그런것인지 아니면 쿼리나 커맨드 둘 중에 하나인지 궁금합니다.
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
학습용 java/spring 오픈소스 추천
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요 강사님, 강의 잘 듣고 있습니다.이름 짓기와 관련된 팁 중에서 "좋은 코드를 많이 보고, 자주 쓰이는 단어와 개념을 습득하라"는 내용이 인상 깊었습니다. 말씀하신 대로 좋은 코드를 보는 것이 중요한 것 같지만, 제가 Java와 Spring을 이제 막 배우기 시작한 단계라 어떤 오픈소스를 참고하면 좋을지 잘 모르겠습니다.혹시 Java와 Spring 기반의 좋은 오픈소스 프로젝트 중에서,코드 네이밍이나 구조가 잘 되어 있어서 참고하기 좋은 것실무와도 연관 지어 학습하기 좋은 것이 있다면 추천해주실 수 있을까요?또한, 강사님께서 개인적으로 공부하거나 추천하시는 오픈소스가 있으시다면 함께 공유해주시면 큰 도움이 될 것 같습니다.감사합니다!
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
중복된 메서드 줄이는 방법
안녕하세요 선생님 강의 잘 들었습니다!강의를 통해 배운 내용을 개인 프로젝트에 적용 하던 중 궁금한점이 생겨 질문 드립니다.private List<Long> getEventIdList(List<EventSimpleInfo> events) { return events.stream() .map(EventSimpleInfo::getId) .toList(); } private List<Long> getEventIds(List<BookmarkedEventSimpleInfoQuery> events) { return events.stream() .map(BookmarkedEventSimpleInfoQuery::getId) .toList(); } Dto 조회한 두개의 List 입니다.두 List에서 id 값을 뽑는 같은 행위를 하고 있는데 어떻게 하면 중복을 줄일수 있을지 모르겠습니다.Dto에 일급 컬렉션을 적용하자니 너무 클래스가 많아 질것 같고,Dto에 인터페이스를 적용 하자니 Dto에 역할을 부여 하는 것이 맞나? 라는 생각이 듭니다.다른 방법은 Dto 내부에 로직을 두는 방법도 생각해 보았는데 어떤게 좋을까요?..쿼리를 줄이기 위해 Dto 조회를 하고 부족한 상태를 조회 하여 값을 채우고 있는데 너무 중복된 행위가많아서 고민 입니다. 어떻게 해야 할까요?
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
MarketPlace에서 Sonarlint 검색이 안됩니다.
intelliJ Ultimate 2024.3 버전 사용 중입니다. 마켓플레이스에서 sonarlint를 검색했는데 받을 수 있는 플러그인이 뜨지가 않습니다ㅠㅠ 웹 검색을 해봐도 저 같은 이슈는 찾을 수 없어서 질문 글 올립니다확인해봐야할 설정값이나 옵션이 있을까요??
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
isLandMineCell() 메서드 질문
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 리팩토링한 MinesweeperGame.open() 메서드에 대해서 질문있습니다! private static void open(int row, int col) { if (row < 0 || row >= BOARD_ROW_SIZE || col < 0 || col >= BOARD_COL_SIZE) { return; } if (BOARD[row][col].isOpened()) { return; } if (isLandMineCell(row, col)) { return; } BOARD[row][col].open(); if (BOARD[row][col].hasLandMineCount()) { return; }수업을 따라오면서 isLandMineCell()은 Cell이 지뢰인지 확인하는 메서드이기 때문에 MineSweeperGame 클래스의 메서드가 아닌, Cell 클래스의 메서드가 되어야 open 메서드가 동일한 추상화 레벨을 갖는게 아닌가 하는 의문이 들었습니다. if (BOARD[row][col].isOpened()) ... if (isLandMineCell(row, col)) ...위 두 조건문의 추상화레벨이 통일되지 않다는 생각도 들었구요. isLandMineCell이 Cell 클래스의 메서드로 작성하지 않은 이유가 뭔지 궁금하고, 제가 가지고 있는 생각(추상화레벨 관련)이 잘못된 이유도 궁금합니다. 항상 친절한 설명 감사합니다 많이 배우고 있습니다:)
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
Cell[][]BOARD 매개변수받기
강의 질문 있습니다![섹션4.객체지향패러다임] - SRP: Single Responsibility Principle 강의 - 14분38초경 코드28번줄 cosoleOutputHandler.showBoard(BOARD); 이 부분에서 해당 Cell[][]BOARD를 매개변수로 받고 showBoard(Cell[][] board) 사용되는 부분이 이해가 잘 안갑니다..! 흐름이 어떤식으로 진행되며, 어떤 과정으로 코드가 진행되는지 궁금합니다!
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
ConsoleInputHandler에서 왜 final붙여야 하는지
18줄 코드인 final을 붙여야하는 이유가 있을까요?
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
정적 생성자 메서드 of, from
정적 생성자 메서드의 메서드 명을 정하실 때 of 혹은 from 그 외 추가로 create 등등... 몇 가지 더 있는걸로 아는데, 그 차이가 제 입장에서는 되게 미세하기도 하고 잘 와닿지 않는데 강사님은 어떤 기준을 두고 메서드 명을 정하시나요??
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
Getter관해서
수업을 통해 무분별한 Getter/Setter 사용을 지양해야 한다는 내용을 들었습니다.저는 Entity를 만들 때 @Getter를 자주 사용했는데, 수업에서는 "필요한 경우에만 추가하라"고 설명하더라고요.그런데 여기서 말하는 "필요한 경우"가 어떤 상황을 의미하는지 잘 감이 오지 않습니다.예를 들어, 비밀번호 같은 중요한 정보는 Getter를 사용하기보다는 내부에서 메서드를 통해 사용하는 게 좋다는 건 이해가 됩니다.그렇다면 일반적인 경우에서 Getter는 어떤 상황에서 사용해야 하는 걸까요...?
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
이름 바꾸기
23번째줄에서 for문 i 말고 지뢰라는 이름으로 (예를들어, mines 등 ) 바꿔도 되지 않을까요 ..?
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
stack 대신 queue 를 사용해 bfs 로 변경해도 되나요??
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 아래처럼 Stack 대신 Queue 를 사용해 BFS 로 변경해도 문제가 없을까요? private void openSurroundedCellsBFS(CellPosition cellPosition) { Queue<CellPosition> queue = new LinkedList<>(); queue.add(cellPosition); while (!queue.isEmpty()) { openAndEnqueueCell(queue); } } private void openAndEnqueueCell(Queue<CellPosition> queue) { CellPosition currentCellPosition = queue.poll(); // 큐에서 꺼냄 if (isOpenedCell(currentCellPosition)) { return; } if (isLandMineCellAt(currentCellPosition)) { return; } openOneCellAt(currentCellPosition); if (doesCellHaveLandMineCount(currentCellPosition)) { return; } List<CellPosition> surroundedPositions = calculateSurroundedPositions(currentCellPosition, getRowSize(), getColSize()); for (CellPosition surroundedPosition : surroundedPositions) { queue.add(surroundedPosition); } }
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
현업에서 ISP를 도입하려는데 인터페이스 설계에 있어서 의문이 있습니다.
금융업 it업계에 종사하는 개발자입니다.isp에 대해 어렴풋이 알고 있다가 강사님의 강의를 보면서지난 리팩토링 과정에서 제가 겪었던 문제에 답이 될 수 있을 것 같아서 질문드립니다.인증서라고 하는 비즈니스가 하나의 소스 코드에 if else로 분기처리되어있는 것을 각 인증서라는 인터페이스를 두고, 요청으로 온 구분코드에 따라 서로 다른 구현체를 생성하도록 했습니다.이때 한가지 문제가 인증서 별로 기능이 상이하다는 것이었는데요. 발급, 폐기, 환불 등의 기본적인 기능들은 모두 제공하지만 갱신, 강제폐기/환불 등 특정 인증서에서만 구현되는 기능들이 있을 때 강의에서 말씀하신 isp를 위반하는 상황이 발생할 거라고 생각했습니다. 그렇다면 공통기능에 대한 인터페이스, 특정기능에 대한 인터페이스를 분리하자라는 생각까지 해보았는데,, 이렇게 됐을 때 공통기능을 구현하지않는 또 다른 인증서 상품이 신규 됐을 때 문제가 될거라는 생각이 들었습니다. 다른 방식으로 발급, 폐기, 환불 등 각각의 기능들을 인터페이스화 하자면 각 구현체별로 구현하는 인터페이스가 너무 많아지는게 아닐까 하는 생각도 들었습니다.이럴 경우에는 어떻게 설계에 접근해야할지 고견을 여쭙니다. 혹 이럴 때 용이한 디자인패턴 같은게 있는지요.긴 글 읽어주셔서 감사합니다.
-
미해결Readable Code: 읽기 좋은 코드를 작성하는 사고법
null을 가질 수 있는 값을 인자로 넘겨야 하는 경우
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. Optional을 인자로 받는 것이 안티패턴이라고 하셨는데null을 가질 수 있는 값을 인자로 넘겨야하는 경우에는그냥 해당 값을 Optional로 감싸지 않고 그대로 넘기고받는 쪽에서 if문으로 null인 경우를 처리해주는 방법을 사용하나요??
-
해결됨Readable Code: 읽기 좋은 코드를 작성하는 사고법
리팩토링을 하고 난 뒤 다시보면 오히려 더 복잡해 보이는것 같은 느낌입니다..
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 강의에서는 사실 처음에 만들어졌던 로직을 하나하나씩 변경해가면서 그 히스토리를 알고 있는 상태니까.. 리팩토링을 하는 과정이나, 하고 난 뒤에도 어느정도 이해가 가지만 만약 처음 들어온 신입 개발자가 리팩토링이 완료된 코드를 보면 오히려 더 복잡해 보이는 경우도 있지 않을까 하는 생각이 들어서 질문드립니다..가독성을 위해 추상화를하고 메소드를 분리하고 했지만, 상세 구현 로직을 확인하려면 다시 내부로 들어가는 과정을 거치면서 오히려 집중력이 분산되는 느낌인데.. 리팩토링이 추구하는 가치와 약간 모순된다는 느낌을 받았습니다.. 혹시 이렇게 느끼는 이유가 아직 코드 작성 경험이 적어서 그러는걸까요? 굳이 추상화해놓은 메소드 내부까지 들어가서 확인할 필요는 없는건가요?제가 느끼기로는 맨 처음 아무런 정리가 안되었던 코드가 제일 이해가 잘갔던 것 같아서 계속 리팩토링을 하면서도 고민이 되어서 질문드립니다..