CleanCode TIL 5일차

최정환·2022년 2월 23일
0

clean-code

목록 보기
4/11

TIL (Today I Learned)

2022.02.22~23

오늘 읽은 범위

3장. 함수

🎨 책에서 기억하고 싶은 내용을 써보세요.

  • 42p

    함수를 만드는 첫째 규칙은 '작게!'다.

  • 43p

    if / else / while 문 등에 들어가는 블록은 한 줄이어야 한다는 의미다.
    이 말은 중첩 구조가 생길만큼 함수가 커져서는 안 된다는 뜻이다.

  • 44p

    함수는 한가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야한다.

  • 46p

    한 함수 내에 추상화 수준을 섞으면 코드를 읽는 사람이 헷갈린다.

    코드는 위에서 아래로 이야기처럼 읽혀야 좋다. 한 함수 다음에는 추상화 수준이 한 단계 낮은 함수가 온다.

  • 49p

    함수 이름을 정할 때는 여러 단어가 쉽게 읽히는 명명법을 사용한다. 그런 다음, 여러 단어를 사용해 함수 기능을 잘 표현하는 이름을 선택한다.

  • 50p

    이름을 붙일때는 일관성이 있어야 한다. 모듈 내에서 함수 이름은 같은 문구, 명사, 동사를 사용한다.

    인수가 하나라도 괜찮다. 인수가 2개면 조금 복잡해진다. 인수가 3개를 넘어가면 인수마다 유효한 값으로 모든 조합을 구성해 테스트하기가 상당히 부담스러워진다.

  • 52p

    어떤 코드든 절대로 무시하면 안되니까. 무시한 코드에 오류가 숨어드니까

  • 56p

    객체 지향 언어에서는 출력 인수를 사용할 필요가 거의 없다. 출력인수로 사용하라고 설계한 변수가 바로 this이기 때문이다.

  • 58p

    오류 코드 대신 예외를 사용하면 오류 처리 코드가 원해 코드에서 분리되므로 코드가 깔끔해진다.

    try/catch 블록을 별도 함수로 뽑아내는 편이 좋다.

  • 61p

    데이크스트라는 모든 함수와 함수 내 모든 블록에 입구(entry)와 출구(exit)가 하나만 존재해야한다고 말했다. 즉, 함수는 return 문이 하나여야한다는 말이다. 루프 안에서 break continue를 사용해선 안 되며 goto는 절대로 안된다.

🍋 오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

함수의 구조적 설계에 대해 많이 배우게 된 내용들이었다.
대학에서 프로그래밍을 처음 배울때 인수에 대한 개념이 너무 안잡혔었던 기억이 있었는데 그때는 배운답시고 인수를 무식하게 3개 4개를 집어 넣으면서 개념에 대해 공부하려고 하니까 그랬었구나 하는 생각도 났다.

나도 무언가를 구현할때 if문을 반복하며 예외처리를 하는데 이게 안좋은 코드인걸 알지만 다른 대안을 몰라서 헤메고 있었고 그에 대한 해답을 얻을 기분이다.

많은 함수를 보면 머리가 아파지고 local variable을 다른 함수에 사용하기 위해서 더 머리가 아프게 되는 일이 있었기때문에 나는 함수는 적으면 좋고 내용물이 많으면 한번에 해결하니까 좋은게 아닌가? 라는 생각에 대해 다시 생각하게 되었다. 확실히 내가 다시 짠 코드를 보면서 이해가 안되고 보기 싫은 기분이 들게 됬었던 기억이 있기 때문이다.

🧐 궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

  • 다향성 (polymorphism) : 프로그래밍 언어의 자료형 체계의 성질을 나타내는 것으로, 프로그램 언어의 각 요소들(상수, 변수, 식, 오브젝트, 함수, 메소드 등)이 다양한 자료형(type)에 속하는 것이 허가되는 성질

  • 단일 책임 원칙 / SRP (Single Responsibility) : 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 함을 일컫는다
    https://ko.wikipedia.org/wiki/%EB%8B%A8%EC%9D%BC_%EC%B1%85%EC%9E%84_%EC%9B%90%EC%B9%99

  • OCP (Open Closed Principle) : 소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다
    https://ko.wikipedia.org/wiki/%EA%B0%9C%EB%B0%A9-%ED%8F%90%EC%87%84_%EC%9B%90%EC%B9%99

  • 추상 팩토리 (ABSTRACT FACTORY) : 구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴
    https://gmlwjd9405.github.io/2018/08/08/abstract-factory-pattern.html

  • 플래그 인수 : 호출되는 함수가 실행할 로직을 호출하는 쪽에서 선택하기 위해 전달하는 인수

  • 의존성 자석 (magnet) : 이 단어의 뜻을 정확히 찾을 수 없기때문에 문장으로 정의한다.
    오류 코드를 반환한다는 이야기는 클래스든 열거형 변수든 어디선가 오류 코드를 정의한다는 뜻이다.
    그래서 오류코드대신 익셉션을 반환해라

  • Error enum : JAVA의 열거형 - 서로 연관된 상수들의 집합

  • 관점 지향 프로그래밍 / AOP : 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화(어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것)하겠다는 것이다.
    https://engkimbs.tistory.com/746

  • 컴포넌트 기반 소프트웨어 공학 / COP : 기존의 시스템이나 소프트웨어를 구성하는 컴포넌트를 조립해서 하나의 새로운 응용 프로그램을 만드는 소프트웨어 개발방법론

  • 도메인 특화 언어 : 관련 특정 분야에 최적화된 프로그래밍 언어
    특정 영역의 문제 해결에는 그 영역에 맞는 특화된 도구를 사용하자
    https://unabated.tistory.com/entry/DSLDomain-Specific-Language-이해하기

0개의 댓글