목록분류 전체보기 (572)
오봉이와 함께하는 개발 블로그
주석 먼저 내 개인적은 생각을 말하면 주석 자체는 나쁘다는 생각을 하지 않는다. 단, 주석을 작성한다는 것은 어딘가 불친절하거나 코드로 설명하기 어려운 무언가가 있다는 것이고 그게 로직이라면 조금 문제의 여지가 있을 수 있다 생각한다. 혹은 잘못된 정보를 제공하는 주석 또한 문제가 있다고 생각한다. 언뜻 보기로는 책에서 주석은 나쁘다고 규정하는 듯 보이지만 특정 조건에서의 주석이 나쁘다고 보는듯 하다. 내가 이렇듯 주석을 무시하는 이유가 무엇이냐고? 거짓말을 하니까. 항상도 아니고 고의도 아니지만 너무 자주 거짓말을 하니까. 주석은 오래될수록 코드에서 멀어진다. 오래될수록 완전히 그릇될 가능성도 커진다. 이유는 단순하다. 프로그래머들이 주석을 유지하고 보수하기란 현실적으로 불가능하니까. 처음 주석은 좋은..
함수 이번 챕터는 함수를 어떻게 하면 가독성 좋게 잘 만들 수 있는지 알려준다. 이론적으로 무엇이 좋더라 에서 멈추는 것이 아니라 무작정 따라해보면 좋은 지침들을 통해 어떻게 좋은 함수를 만들 수 있는지 알려준다. 단, 무작정 따라하는 것은 좋지만 맹신하고 맹목적으로 추종하진 말자. 분명 예외 케이스도 있을 것이다. (https://www.youtube.com/watch?v=th7n1rmlO4I&ab_channel=%EC%BD%94%EB%94%A9%EC%95%A0%ED%94%8C) 작게 만들어라 책에서 첫 번째 규칙은 작게 만들라 한다. 구체적인 증거는 없지만 저자의 수십년간 경험을 통해 쌓인 빅데이터를 활용해 세운 규칙으로 보인다. 우테코 프리코스에서 주는 과제를 할 때는 함수의 길이가 15 줄을 넘지..
의미있는 이름 Robert C. Martin - Clean Code의 의미있는 이름 에 관한 내용을 보고 생각하는 내용을 적는다. 책을 보면서 적기 때문에 책을 같이 보고 있지 않다면 다소 불친절한 글이 될 수 있을 거 같다. 의도를 분명히 밝혀라 public class Member { int a; } int a 가 뭔지 알 수 있는 사람이 있을까? 코드 작성자도 한 달이 지난 후 보면 저 a를 사용하는 곳을 모두 찾아야 어떤 값인지 알 것이다. 변수명에서 어떠한 힌트도 얻을 수 없다. 혹시 저렇게 변수를 만들고 있는 사람이 이 글을 본다면 아래와 같이 명확한 이름을 사용하는 것이 어떤기? public class Member { int age; } 조금 더 복잡한 예제를 보자. public List ge..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bbu9dZ/btsAXe3nzir/qJrLfagPCDPqazYLrbr4tk/img.png)
개요 문득 Sync & Async / Block & Non-Block에 대해 명확하게 알고 있는지, 남에게 잘 설명할 수 있는지를 생각했는데 자신 없다고 느껴 글로 정리하려 한다. 자칫 같은 개념이라 생각할 수 있지만 둘은 다른 개념이며 당연히 동작 또한 다르다. 나와 같은 질문 혹은 고민을 가진 사람이 이 글을 보고 명쾌하게 답을 얻어갔으면 한다. Blocking & Non-Blocking 먼저 Blocking과 Non-Blocking에 대해 설명하면 이 개념의 관심사는 제어권에 있다. functionA에서 functionB를 호출할 때 Blocking은 functionB를 수행하는 동안 더이상 functionA가 진행되지 않고 대기하는 상황이다. 즉 함수 제어권이 functionB로 넘어가 funct..
상속 상속을 사용하면 슈퍼 클래스의 로직을 서브 클래스에서 그대로 사용할 수 있어 슈퍼 클래스에 공통 로직을 두는 저장소 개념으로 사용할 수 있지만, 너무 일반화 시키면 강한 결합이 발생한다. 코드 아래 코드를 보자 public abstract class DiscountBase { public int price; public int getDiscountedPrice() { int discountPrice = price - 3000; if (discountPrice < 0) { return 0; } return discountPrice; } } public class RegularDiscount extends DiscountBase { } public class SummerDiscount extends D..