게시글
질문&답변
예시코드 누락
안녕하세요 말씀 감사합니다 🙂 예시코드누락된곳 말씀해주시면 바로 개선해보겠습니다 :)
- 1
- 2
- 276
질문&답변
이해가 잘 안됩니다.ㅠ
코드 길이가 매우 긴 함수: 길이가 긴 함수라는 것은 그만큼 하는일이 많고 변수도 많고 복잡하다는 뜻입니다. 코드를 보다가 이 변수는 어디서 선언된 변수지? 어떤 값으로 설정 변수였지? 하시면서 위아래로 스크롤을 계속하실텐데 그러다보면 기존에 코드를 어디까지 봤는지, 다른 변수는 어떤 값으로 설정되었는지 등등 혼란을 느끼게 됩니다 호출자 함수(내부 함수를 호출한 코드 라고 생각하시면 됩니다)로부터 너무 멀리 떨어져 있는 내부 함수가 코드 이해에 어렵다는 것은 내부 함수를 살펴본 후 다시 호출자 코드로 돌아가는 과정에 스크롤이 많을 수록 주의가 산만해지고 그만큼 코드이해가어렵다 라고 생각하시면 됩니다. ide 사용하면 호출자 코드로 바로 돌아갈수있지않느냐 할 수 있겠지만 호출된 내부 코드를 여러 곳에서 사용할경우 적절한 호출자 코드를 찾아 돌아가기가 쉽지 않은 경우들이 종종 있습니다.
- 0
- 2
- 315
질문&답변
질문드립니다
안녕하세요 하령님 :) 조금 더 구체적으로 어느부분이 궁금하신지 알 수 았을까요??
- 1
- 1
- 174
질문&답변
질문있습니다.
임시변수와 관련된 소주제에 다룬 내용이라고 보시면 되겠네요 :) 예로 보여주신 코드에서는 굳이 뭐가 더 나은지를 결정하고 싶지는 않습니다만 꼭 하나를 골라야한다면, 굳이 itemName 변수를 쓸 필요가 있나 싶습니다. (저런 임시 변수가 굳이 필요한 경우는 강의 내용에) 힌트>> item.getName()을 itemName이라는 변수로 표현한다고 더 가독성이 좋아진다고 볼 수 없겠습니다.
- 1
- 2
- 183
질문&답변
이해가 안되는 부분이 있어서 질문드립니다.
아닙니다 :) 충분히 오해하실만합니다. 이게 사실, 코드의 추상화 수준을 일관성있게 하라는 소주제에 넣었다가 소주제 'Don't reinvent the wheel'로 변경하게 된 케이스인데요, Don't reinvent the wheel과도 연관이 있고 추상화 수준 관련 내용이 먼저 나와 이해에 어려움이 없을 것이라고 생각했네요. 자바 언어에서, System.out.println() 이라는 (표준 출력)메서드의 코드를 예로들어 답변 드려보겠습니다. 위 메서드의 코드를 보니 print(), newLine() 등이 메서드를 사용하고 있네요. print() 메서드 코드도 한 번 봐보겠습니다. print() 메서드는 write()라는 보다 저수준 메서드를 호출하고 있네요 더 들어가보니까 flush(), flushBuffer() 같은 메서드 호출 코드가 보입니다. 이 정도로 추적을 끝내고 답변 드려보겠습니다. flush(), flushBuffer() 같은 메서드 이름만봐도 System.out.println() 와 그 추상화 수준이 다른 것을 바로 알 수 있을 거에요 만약 이렇게 서로 다른 추상화 수준의 코드가 혼재되어 있다, 그러면 (저수준 기능으로 구현된)이미 만들어진 기능이 있는 것은 아닌지 생각해보라는 의미입니다 :)
- 1
- 1
- 209
질문&답변
정적 팩토리 메서드 강의 보고 질문드립니다.
맞습니다 :) 추천하는 도서는 이팩티브자바 추천드리구요. 저도 추천받은 책인데 자바 코딩의 기술(빨간색 책입니다)도 아주 좋다고 합니다. 후자를 먼저보고 전자를 보면 좋을 것 같아요
- 1
- 1
- 176
질문&답변
좋은 naming이란에서
OMG님 말씀이 맞습니다 :) 요지는 더 적합한 상황/목적에 맞는 이름이 있으니 조금 더 신경써서 이름 짓자는 의미로 보시면 되겠습니다 :) 좋은 질문 아주아주 감사합니다.
- 1
- 1
- 291
질문&답변
그 밖의 좋은 코드 작성을 위한 Tip2 에서..
오타 발견해주셔서 너무 감사합니다 :) 강의 완성도 향상에 큰 도움이 됩니다. 오늘 저녁 중으로 오타 수정하겠습니다. 감사의 의미로 https://open.kakao.com/o/suB1KQvc 연락주시면 스벅 기프티콘 선물 드리겠습니다. 다시 한 번 감사 인사 전합니다 :)
- 1
- 1
- 201
질문&답변
안녕하세요. 이해가 안되는 부분이 있습니다.
와 좋은 질문 감사합니다. 이런 질문들을 기다렸습니다. :) 첫번째 질문 : 아 오해에 소지가 있으셨겠어요 유효성 검사를 적당히하라는 것이아니구요. (유효성 검사는 아주 당연하게 무조건 철저히) 메서드의 입력 형식에 엄격한 제한을 두면 유효성 검사할 항목이 줄어든다는 의미입니다. 인자에 대한 유효성은 무조건 철저히 하셔야 합니다. 소제목대로, 만능API는 어떤 인자 유형도 받아들여 답을 낼 수 있는 api입니다. 제가 사용해본 적 있는 매장 주문 챗봇에 대해 이야기해볼게요. 그 매장의 챗봇은, 채팅창에 주문 또는 주문취소 라고 검색을 해도 동일한 결과(메뉴화면)를 응답합니다. 제대로 동작하는 것이라고 할 수 없죠? 아마도 입력 문자열이 "주문"이라는 문자열을 포함하면 메뉴화면을 응답하게 만들어져 있는 것 같아요. 그럼 어떻게 바꿔야할까요?? 방법이야 많겠지만 가장 초보적인 방법을 예로 들어보자면, 입력이 "주문"인지 "주문"이 포함된 문자열인지를 구분해주면 되겠네요. 아무튼 "주문"이라는 문자열 입력만으로도 여러 고려사항이 있습니다. 또, 아이스 아메리카노, ice americano, 아아, 차가운 아메리카노라고 입력을 하면 아이스 아메리카노가 주문되어야 합니다. 그 밖에도 여러 고려사항이 많습니다. 좋은 챗봇이 되려면 사용자의 여러 입력에 답장할 수 있어야할테니까요. 이런 챗봇('주문', '아이스 아메리카노' 만으로도 여러가지 고려 사항이 있는)같은 만능 API(함수)는 간단하게 인자 유효성 검사를 할 방법이 없습니다. 받아들일 수 있는 입력의 유형이 너무 많아서요. 제가 강의 내용에서 드린 말씀은 이런 챗봇같은 만능 api를 피하란 이야기였습니다. 이건 사실 단지 함수 레벨이 아닌 시스템 레벨에서도 동일하게 요구되는 레벨입니다. (챗봇이 나쁜 어플리케이션의 예라는 뜻은 아닙니다. 챗봇은 그 시스템 성격상 다양한 입력을 받을 수 밖에 없죠.) 그리고 그러다보면 저절로 api의 코드는 더 단순해 질 것이고 입력에 대한 유효성 검사도 단순해질 것이라는 의미입니다 :) (극단적인 반대의 예로, "one" 또는 "two"만 입력으로 허용하는 함수가 있다고 할게요 "one" 또는 "two"가 아닌 모든 입력에 대해서는 예외를 던지도록 간단하게 유효성 검사 코드 작성이 가능합니다.) 두 번째 질문: parent()라는 public 함수가 있다고 할게요. public 스코프를 갖는 이 함수는 이 함수가 정의된 클래스 밖(외부)에서 호출이 가능하겠네요. 그리고 이 클래스에는 childA(), childB()라는 외부에 공개되지 않은 함수가 있고 이 함수들은 parent()라는 함수에서만 호출한다고 해보겠습니다. 즉 같은 클래스 내부에서만 호출되는 함수입니다. parent() 함수에는 a와 b라는 두 개의 인자가 있습니다. 이 두 인자는 각각 childA(), childB()라는 내부 함수에 전달됩니다. 만약 parent() 함수에서 인자 a와 b에 대한 유효성 검사를 확실하게 했는데 childA(), childB()라는 같은 클래스에서 내부적으로만 호출되는 두 함수에서도 또 한 번 인자 유효성 검사를 할 필요 없다는 의미입니다. parent()에서까지 인자 유효성을 검사하지 않아도 된다는 뜻이 아닙니다 :) 아주 만약에, "이 클래스를 나의 옆자리에 앉은 동료와 나눠서 개발하는 중이기 때문에 나의 동료가 parent() 함수에서 인자 유효성 검사를 안했을 경우를 대비해야한다." 라고 생각이 드신다면 동료가 작성한 parent() 함수의 코드를 한 번 읽어보시거나 동료를 믿되 찝찝하면 대화를 나누라고 말씀드리고 싶어요. :) 질문 너무 감사합니다. 샘돌이님의 이런 적극적인 행동(질문)이 같은 의문을 가질지 모를 다른분들에게 큰 도움이 될 거에요 :)
- 1
- 1
- 169
질문&답변
그밖의 좋은 코드 작성을 위한 Tip3: 오타 제보
말씀해주신 오타 수정 완료하였습니다 민정님의 핫한 제보가 강의 자료의 퀄리티 향상에 큰 도움이 되었습니다 :) 다시 한 번 감사합니다.
- 1
- 2
- 163