일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 깊게 생각해보기
- AWS
- branch 전략
- 검색어 추천
- 결제서비스
- prg 패턴
- 코드 계약
- 디버깅
- 숫자 블록
- 이분탐색
- 객체지향패러다임
- 트랜잭샨
- 수신자 대상 다르게
- 쿠키
- 레디스 동시성
- 셀러리
- 완전탐색
- piplining
- spring event
- 구현
- 좋은 코드 나쁜 코드
- docker
- BFS
- jwt 표준
- 알람 시스템
- 프로그래머스
- 백준
- gRPC
- 누적합
- 카카오
- Today
- Total
목록Clean code (10)
코딩관계론
서론 비합리적이거나 애매한 가정에 기반해서 코드가 작성되거나 다른 개발자가 잘못된 일을 하는 것을 막지 못했을 때 코드가 오용되기 쉽다. 사용지치침을 제공한다면 코드 오용 문제를 완화하는데 도움이 될 수 있디. 하지만 이런 설명서는 코드의 세부 조항이기 때문에 간과되거나 최신 정보가 아닐 가능성도 존재한다. 그러므로 코드를 오용하기 어렵게 설계하고 작성하는 것이 중요하다. 불변 객체로 만드는 것을 고려하라 단순하다. 불변 객체의 상태는 생성된 시점으로부터 파괴되는 시점까지 그대로 유지된다. 즉, 프로덕션에서 해당 객체가 가진 값을 변하지 않게 하려는 추가적인 노력을 필요로 하지 않는다. Thread-Safe하다. 기본적으로 멀티스레딩 환경에서의 문제는 여러 스레드가 같은 객체에 접근하여 데이터를 쓰는 작..
서론 코드가 실행되는 환경은 굉장히 불완전합니다. 여러가지 상황을 따져 봤을 때 오류는 불가피하게 발생하게 됩니다. 오류 사례를 신중하게 생각하지 않고는 견고하고 신뢰성 높은 코드를 작성할 수 없다. 따라서 오류의 종류 및 차이점들을 살펴보고 적절하게 처리할 수 있는 방법에 대해서 기술해보고자 한다. 오류의 종류 1. 복구할 수 있는 오류 시스템 문제가 아닌, 시스템 외부 환경으로 인해 발생되는 오류이다 예를 들면 사용자의 입력이 잘못되서 다음 단계를 진행할 수 없거나, 인터넷 연결이 불안정해서 사용자의 요청을 진행할 수 없는 경우이다. 2. 복구할 수 없는 오류 시스템 오류를 복구할 수 있는 합리적인 방법이 없을 때다, 이러한 오류는 프로그래밍 오류 때문에 발생할 때가 많다. 예를 들면 코드와 함께 추..
[코드 계약의 목적] 일관성과 명확성: 코드 계약을 통해 코드의 의도와 사용 방법을 명확하게 정의할 수 있습니다. 이는 코드를 작성한 개발자뿐만 아니라 다른 사람들에게도 코드의 의미를 명확히 전달하여 일관성 있는 개발을 도와줍니다. 문서화와 이해도: 코드 계약은 코드에 대한 문서화 역할을 수행합니다. 이를 통해 코드를 이해하기 쉽고, 코드의 목적과 기능을 파악할 수 있습니다. 코드 계약을 통해 다른 개발자들이 코드를 빠르게 이해하고 활용할 수 있습니다. 협업과 유지 보수: 코드 계약은 다른 개발자와의 협업에서 필요한 코드 사용법을 명확하게 전달합니다. 이를 통해 다른 개발자들은 코드를 쉽게 활용하고 유지 보수할 수 있습니다. 코드 계약은 프로젝트의 지속적인 개발과 유지 관리를 지원합니다. 버그와 오류 예..
[추상화를 하는 이유] 추상화는 코드 품질의 핵심 4요소를 달성하는 데 도움을 줍니다. 가독성: 추상화는 코드베이스에 있는 모든 세부 사항을 이해하는 것을 불가능하게 만들지만, 몇 가지 높은 수준의 추상화를 이해하고 사용하는 것은 비교적 쉽습니다. 따라서 코드의 가독성이 크게 향상됩니다. 모듈화: 추상화 계층을 사용하면 하위 문제에 대한 해결책을 깔끔하게 분리하고 구현 세부 사항을 외부로 노출하지 않도록 할 수 있습니다. 이를 통해 다른 계층이나 코드의 일부에 영향을 미치지 않고도 계층 내에서만 구현을 변경하는 것이 매우 쉬워집니다. 재사용성 및 일반화성: 추상화 계층을 통해 하위 문제에 대한 해결책이 간결하게 제시되면 해당 해결책을 재사용하기 쉬워집니다. 또한, 문제를 적절하게 추상화하여 하위 문제로 ..
파이썬 데코레이터(Decorator)란 기존의 코드에 추가적인 기능을 더해주는 역할을 합니다. 장점 코드 재사용성이 높아집니다. 데코레이터는 여러 함수나 메소드에 적용할 수 있으므로, 중복되는 코드를 많이 줄일 수 있습니다. 예를 들어, 인증이 필요한 기능을 가진 많은 함수가 있다면, 데코레이터를 이용해 인증을 한 번만 처리하고 해당 함수를 호출할 수 있습니다. def authenticated(func): def wrapper(request, *args, **kwargs): if request.user.is_authenticated: return func(request, *args, **kwargs) else: return HttpResponse(status=401) return wrapper @auth..
캡슐화 변수와 유틸리티 함수는 가능한 공개하지 않는 편이 낫지만 반드시 숨겨야 한다는 법칙도 없다. 하지만 캡슐화를 풀어주는 결정은 언제나 최후의 수단이다 클래스의 크기 → 항상 작아야 한다 작아야 한다의 기준은 = 클래스가 맡은 책임을 센다. 클래스 이름 = 해당 클래스의 책임을 기술한다 class ClientBluetooth(threading.Thread) 클래스의 목적: 디바이스 이름을 입력 받아 통신을 수립하는 클래스 책임이 두 개다 디바이스의 이름을 입력 받는 책임 통신을 수립하는 책임 class DevInfo class SearchDev class MatchServiceToPortNum class BindToSocket class CommunicationToDev DevInfo: 디바이스 정보..
형식을 맞추는 목적은 의사소통의 일환이기 때문이다. 또한 추후에 버전이 달라질때 유지보수와 확정성이 이점을 주기 때문이다. 형식을 맞추기 위해서는 적절한 행 길이를 유지해라 200~500 신문 기사처럼 작성하라 신문을 보면 위에서 요약하고 아래에 가면서 세세한 내용이 나탄다는 것을 기억해라 개념은 빈 행으로 분리하자 빈 행은 새로운 개념을 시작한다는 시각적 단서다. // 빈 행을 넣지 않을 경우 package fitnesse.wikitext.widgets; import java.util.regex.*; public class BoldWidget extends ParentWidget { public static final String REGEXP = "'''.+?'''"; private static fin..
자료추상화 구현을 감출려면 추상화가 필요하고 그보는 추상인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 한다(오른쪽 코드) 자료를 세세하게 공개하기보다는 추상적인 개념으로 표현해야 한다. public class Point { private double x; private double y; } 변수를 private로 선언했다 하더라도 무분별한 get, set함수를 제공한다면 구현을 외부로 노출하는 샘이다. public interface Point { double getX(); double getY(); void setCatesian(double x, double y); double getR(); double getTheta(); void setPolar(double r, dou..
작게 만들어라 public static String renderPageWithSetupsAndTeardowns( PageData pageData, boolean isSuite) throws Exception { boolean isTestPage = pageData.hasAttribute("Test"); if (isTestPage) { WikiPage testPage = pageData.getWikiPage(); StringBuffer newPageContent = new StringBuffer(); includeSetupPages(testPage, newPageContent, isSuite); newPageContent.append(pageData.getContent()); includeTeardownP..