전체 글 261

[CleanCode]오류처리-정상 흐름을 정의하라

특수 사례 패턴Special Case Pattern특수 사례 패턴이란?클래스나 객체로 조작해 특수 사례를 처리하는 방식이다.한마디로 예외가 아니라 코드로 해결할 수 있다면, 예외적인 상황을 캡슐화해서 처리하길 권장한다.null을 반환하지 마라대신 Colloections.emptyList()를 반환하라null을 반환하는 코드는 일거리를 늘리고 호출자에게 문제를 넘겨버린다.누구 한명이라도 null확인을 빼먹는다면 애플리케이션은 통제 불능 에러가 될 수 있다.Collections.emptyList()반환타입이 List라서 쿼리로 뭔가를 조회해서 사용할 때 정말 좋을 것 같습니다.정확히는 Dao에서 조회된 자료를 처리하면서 적기 적합할 것 같구요.* 하지만 우선 쿼리가 정상작동하는 지 확인을 다 하고나서 추가하..

📜 CleanCode 2024.09.28

[CleanCode]오류처리-예외사용법

미확인unchecked예외를 사용하라 Python, C#, C++ 모두 예외를 지원하지 않지만 안정적인 소프트웨어를 구현하고 있다.또한 확인된 예외를 최하위 함수라며 상위 함수 모두를 수정해야 하는 연쇄작용이 일어나OCP(소프트웨어 개체는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다)를 위반한다.따라서 확이된 예외를 사용할 경우에는 그만큼 연관함수들도 수정해야하는 비용이 발생한다.하지만 중요한 라이브러리를 작성하다면 확인된 예외도 유용하다.예외에 의미를 제공하라예외를 던질 때 전후 상황을 충분히 덧붙인다.Java는 모든 예외에 호출 스택을 제공하지만그 외에도 오류 메시지에 정보를 담아 함께 던진다.ex)"프로세스 중 오류 발생: 0으로 나눌 수 없습니다."Exception의 prin..

📜 CleanCode 2024.09.27

[CleanCode]오류처리-오류코드보다 예외(try/catch&throws)를 이용하라

시작하기에 앞서 이 글을 간단히 보시면 좋을 것 같습니다.https://yeun-devlog.tistory.com/entry/JAVA%EC%98%88%EC%99%B8-%EC%97%90%EB%9F%AC-throw-throws [JAVA]예외 & 에러, throw & throws예외 & 에러Exception & Error에러 Error간단히 말해 에러는 심각한 경우를 말합니다.ex) 시스템상 메모리부족예외 Exception코드를 Run하기 전, 컴파일 과정에서 개발자의 처리할 수 있는 경우에서 발생하yeun-devlog.tistory.com오류 코드보다예외를 사용하라오류 플래그를 설정하거나INVALIDDEVICE_SUSPENDED호출자에게 오류 코드를 반환하는 방법이 전부였다.logger.log(Level...

📜 CleanCode 2024.09.25

[JAVA]예외 & 에러, throw & throws

예외 & 에러Exception & Error에러 Error간단히 말해 에러는 심각한 경우를 말합니다.ex) 시스템상 메모리부족예외 Exception코드를 Run하기 전, 컴파일 과정에서 개발자의 처리할 수 있는 경우에서 발생하는 작은 오류 등을 얘기 합니다.ex) 타입변환의 오류 throw: 강제 예외처리throws: 예외를 throws 옆에 적은 class로 넘깁니다.

[CleanCode]객체와 자료구조 2

디미터 법칙Law of Demeter: 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다.객체는 자료를 숨기고 함수를 공개한다.즉, 객체는 조회함수로 내부 구조를 공개하면 안된다는 의미다.대표적인 휴리스틱이다.휴리스틱  Heuristic완벽하진 않지만, 일반법으로 좋은/간단한 해결법을 말한다.자세한 예시로클래스 C의 메서드 f는 다음과 같은 객체의 메서드만 호출해야 한다.클래스 Cf 가 생성한 객체f 인수로 넘어온 객체C 인스턴스 변수에 저장된 객체하지만 위 객체에서 허용된 메서드가 반환하는 객체의 메서드는 호출하면 안된다.복잡한 듯이 보이지만 디미터 법칙을 위반하는 사례만 피하면 된다.클래스 A→B에서 조회를 했다면 B에 있는 자료만 가져와야지A→B→C조회를 하면 안된다는 거다.한마디로 코드가 꼬인 ..

📜 CleanCode 2024.09.23

[CleanCode]객체와 자료구조 1

각 변수마다 get/set 함수를 제공한다면 구현을 외부로 노출하는 셈이다.변수 사이에 함수를 넣는다고 구현이 감춰지진 않기에 추상화가 필요하다.객체 ↔ 자료구조객체Object는 추상화 뒤로 숨긴 채 함수만 공개한다.자료구조는Data structure 자료를 그대로 공개하며 별다른 함수를 제공하지 않는다.두 개념은 거의 정반대다. 아래 같은 내용의 코드를 절차지향/객체지향 구조로 알아보자.절차지향 구조객체지향 구조 이렇듯 객체지향/절차지향 구조는 반대되며 각 장단점을 가지고 있다.절차적인 코드는 기존 자료구조(도형)를 변경하지 않으면서 새 함수를 추가하기 쉽고↔ 자료 구조 class를 추가하면 함수를 모두 변경해야 한다.객체지향은 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다.↔ 새로운 함수를..

📜 CleanCode 2024.09.23

[CleanCode]형식 맞추기

코드 형식은 의사소통이다프로젝트가 커질 수록 수많은 개발자들이 만든 클래스를 보게 될 텐데 개발자마다 고유의 스타일로 코드를 적어두었다면 상당히 읽기 힘들 겁니다. 그래서 개발초기에 tab의 크기와 font, 주석형식을 모두 정해두고 진행합니다. 그걸 일일히 검사할 수는 없으니까 sonarQube를 이용해 형식을 검사하면 형식에 맞지 않는 코드들을 찾을 수 있습니다.적절한 행(세로) 길이 Lines책에 따르면 우리가 많이 사용하는 tomcat 등 거대한 시스템도 클래스의 길이가 대개 200줄을 넘지 않는다. 작은 파일들로도 대규모 시스템을 만들 수 있다는 증거다.가로 형식 맞추기신문 기사처럼 작성하라독자는 신문을 위에서 아래로 읽는다.최상단에 가장 큰 표제가 간단한 설명이 적혀있다.이름은 간단하면서도 설..

📜 CleanCode 2024.09.21

[CleanCode]나쁜 주석

주절거리는 주석작성한 개발자가 아니며 이해가 안 되어 다른 모듈까지 뒤져야하는 주석은 좋지 않다.같은 이야기를 중복하는 주석.있으나 마나 한 주석 오해의 여지혹은살짝 잘못된 정보가 담긴 주석의무적으로 다는 주석이력을 기록하는 주석위치를 표시하는 주석공로를 돌리거나 저자를 표시하는 주석주석으로 처리한 코드HTML주석전역 정보주석을 달 땐 근처에 있는 코드만 기술하라.시스템 전반적 정보를 기술하지 않아야 한다.ex) 포트값 정보 등너무 많은 정보모호한 관계함수 헤더

📜 CleanCode 2024.09.20

[CleanCode]좋은 주석

법적인 주석정보를 제공하는 주석 의도를 설명하는 주석.의도를 명료하고 밝히는 주석.결과를 경고하는 주소예전에는 이러한 너무 시간이 오래 걸리는 코드를메서드 이름 앞에 _ 를 붙이는 게 관례였다고 한다.요즘에는 @Ignore 속성에 문자열로 넣어준다고 한다.ex:  @Ignore("실행이 너무 오래 걸린다.")(Junit을 추가하거나 Maven프로젝트에서 사용 가능함)TODO / FIXME 주석프로젝트를 진행하다보면..아직 어떻게 진행할 지 정해지지 않은 부분들이 있습니다.이런 경우에 TODO주석을 달아 둡니다.따라서 TODO /  FIXME 주석은 꼭 필요하고 확인해야할 주석입니다.중요성을 강조하는 주석

📜 CleanCode 2024.09.20