System Design/Principles
좋은 설계란 무엇일까? : 유지보수가 쉬운 시스템을 만드는 것
좋은 설계란 무엇일까? : 유지보수가 쉬운 시스템을 만드는 것
2023.03.03우리가 하는 개발-코딩은, 진리를 추구하는 학문이나 과학이 아니다. 지식이나 법칙, 진리를 발굴한다거나 완전 무결한 최고의 시스템을 만들어내는게 우리의 목표가 아니다. 우리가 하는 것은 공학이다. 공학의 정의는 다양하나, ('실천적인 문제 해결', '기술적 해결책 제시', '현실적인 문제 해결'...) 공통으로 등장하는 키워드는 '문제 해결' 이다. 우리에게 당면한 문제를 효과적으로 해결하는 것. 그 것이 우리의 목표다. 문제를 해결하려면, '문제가 무엇인가?'에서 부터 출발해야 한다. 보통 공학에서 주어지는 문제란, 사업 방향성과 밀접하게 맞닿아 있다. '어떤 방향으로 사업을 하기 위해서, 이런 프로덕트, 서비스가 필요합니다. 비용은 가능한 적게 들면 좋겠습니다.' 주목해야 하는 포인트는 비용이다. 물..
Good design is all about trade-offs
Good design is all about trade-offs
2023.02.15이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
[리팩터링 2판] 3장 Bad Smells in Code
[리팩터링 2판] 3장 Bad Smells in Code
2021.10.14이번 챕터는 언제 리팩터링 해야 하는가? 어떤 코드가 리팩터링이 필요한 코드인가?에 대해서 다룬다. (적어도 나는)코드가 구조적으로 예쁘지 않아서, 보고 있자니 뭔가 마음 한켠이 불편해서, 같은 '느낌'을 감지하고 리팩터링을 하게 되는데 이런 모호한 기준을 끄집어 내서 문장으로 구체화한 챕터이다. 리팩터링이 필요한 코드가 가지고 있는 공통점, bad smell에 대해서 얘기한다. 무엇이 문제인지 알아야, 그에 따른 해결 방안도 떠올릴 수 있다. 부록B에 보면 bad smell case와 해법이 잘 정리되어 있음. 정리하면서 평소 개발하면서 정립했던 나의 개인적인 의견도 같이 적어 두었음. (인용구로 되어 있는 부분) 3.1 기이한 이름 함수든, 변수든, 클래스든 이름만 보고도 각각이 무슨 일을 하고 어떻..
CommonMessageException 정의하기
CommonMessageException 정의하기
2020.11.30CommonMessageException 정의하기 Enum에 OK("1000", "성공") 이런 식으로 정의해놓는건... 분명 좋은 방식이긴 하지만, ```java throw new MyException(dr.getServiceName() + "/" + dr.getCorpName()); ``` 이런 케이스가 커버가 안됨. 특정 메시지나 데이터를 클라이언트 쪽에 내려주고 싶을 때. 다건 업데이트 같은 작업 도중 실패가 발생한 경우, 어느 항목에서 실패가 발생했는지를 클라이언트 쪽에 내려주어야 하는 경우들이 있음. 해결책은? 이런 경우에 사용할 일반적인 Exception을 하나 정의하는 것이 낫다. ```java public class CommonMessageException extends RuntimeEx..
[리팩터링 2판] 1장, 2장 - 성능, 경제적인 효과
[리팩터링 2판] 1장, 2장 - 성능, 경제적인 효과
2019.11.18지엽적인 성능 개선에 집착하지 마라 리팩터링 하다 보면, 예를 들어 반복문을 분리면서 같은 인덱스로 반복을 2번 돌게되는 경우 같은, 성능 관점에서 비효율적인 코드를 종종 마주치게 된다. 그 때 읽어보면 좋은 글. 무엇보다도 반복문을 쪼개서 성능이 느려지지 않을까 걱정할 수 있다. 이처럼 반복문이 중복되는 것을 꺼리는 이들이 많지만, 이 정도 중복은 성능에 미치는 영향이 미미할 때가 많다. ... 경험 많은 프로그래머조차 코드의 실제 성능을 정확히 예측하지 못한다. 똑똑한 컴파일러들은 최신 캐싱 기법 등으로 무장하고 있어서 우리의 직관을 초월하는 결과를 내어주기 때문이다. 또한 소프트웨어 성능은 대체로 코드의 몇몇 작은 부분에 의해 결정되므로 그 외의 부분은 수정한다고 해도 성능 차이를 체감할 수 없다...
고민이 길어질 때, 어느쪽 선택이 우세한지 감이 안올 때, 일단 짜라!
고민이 길어질 때, 어느쪽 선택이 우세한지 감이 안올 때, 일단 짜라!
2017.12.02이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
[코딩 노트] 小 : 라인 레벨 : 자주 사용하는 패턴
[코딩 노트] 小 : 라인 레벨 : 자주 사용하는 패턴
2017.12.02이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
Naming convention
Naming convention
2016.09.14구글의 스타일 가이드 모음https://github.com/google/styleguide http://docs.navercorp.com/coding-convention/ Helper class / Utility class helper class는 특정 클래스의 작업을 도와주는 유틸리티 클래스라고 생각하면 된다. 어떤 기능을 제공하기는 하는데, 그 자체로 그 어플리케이션의 핵심 로직은 아닌 클래스를 의미한다. 예를 들면 DB를 다룬다거나, 안드로이드에서 CustomTabs를 띄워주는 기능을 한다거나. utility class와 하는 일은 비슷하지만, utility class는 모든 메서드가 static이라는 차이점이 있다. 즉, helper class가 더 큰 개념이라고 보면 된다. 클래스 네이밍 suf..