개발자 99% 커뮤니티에서 수다 떨어요!
TIL (Today I Learned)
2022.02.23
오늘 읽은 범위
3장. 함수
책에서 기억하고 싶은 내용을 써보세요.
블록과 들여쓰기
if 문/else 문/while 문 등에 들어가는 블록은 한 줄이어야 한다는 의미다.
바깥을 감싸는 함수(enclosing function가 작아질 뿐 아니라, 블록 안에서 호출하는 함수 이름을 적절히 짓는다면, 코드를 이해하기도 쉬워진다.
중첩 구조가 생길만큼 함수가 커져서는 안 된다는 뜻이다. 그러므로 함수에서 들여쓰기 수준은 1단이나 2단을 넘어서면 안 된다.
함수 당 추상화 수준은 하나로!
함수가 확실히 '한 가지' 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일해야 한다.
위에서 아래로 코드 읽기 : 내려가기 규칙
한 함수 다음에는 추상화 수준이 한 단계 낮은 함수가 온다.
즉, 위에서 아래로 프로그램을 읽으면 함수 추상화 수준이 한 번에 한 단계씩 낮아진다.
Switch 문
본질적으로 switch 문은 N가지를 처리한다.
하지만 각 switch 문을 저차원 클래스에 숨기고 절대로 반복하지 않는 방법은 있다. 물론 다형성(polymorphism)을 이용한다.
서술적인 이름을 사용하라!
길고 서술적인 이름이 짧고 어려운 이름보다 좋다. 길고 서술적인 이름이 길고 서술적인 주석보다 좋다.
함수 인수
함수에서 이상적인 인수 개수는 0개(무항)이다. 다음은 1개(단항)고, 다음은 2개(이항)다. 3개(삼항)은 가능한 피하는 편이 좋다. 4개 이상(다항)은 특별한 이유가 필요하다. 특별한 이유가 있어도 사용하면 안 된다.
많이 쓰는 단항 형식
함수에 인수 1개를 넘기는 이유로 가장 흔한 경우는 두 가지다.
인수에 질문을 던지는 경우
인수를 뭔가로 변환해 결과를 반환하는 경우
이벤트 함수는 입력 인수만 있다. 출력 인수는 없다.
프로그램은 함수 호출을 이벤트로 해석해 입력 인수로 시스템 상태를 바꾼다.
부수 효과를 일으키지 마라!
때로는 예상치 못하게 클래스 변수를 수정한다. 때로는 함수로 넘어온 인수나 시스템 전역 변수를 수정한다.
많은 경우 시간적인 결합(temporal coupling)이나 순서 종속성(order dependency)를 초래한다.
명령과 조회를 분리하라!
오류 코드보다 예외를 사용하라!
반복하지 마라!
구조적 프로그래밍, AOP(Aspect Oriented Programming), COP(Component Oriented Programming) 모두 어떤 면에서 중복 제거 전략이다.
구조적 프로그래밍
모든 함수와 함 수 내 모든 블록에 입구와 출구가 하나만 존재해야 한다. 즉, 함수는 return 문이 하나여야 한다는 말이다. 루프 안에서 break나 continue를 사용해선 안 되며 goto는 절대로, 절대로 안 된다.
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
단순하게 입력을 받고 출력하는 것만으로 함수로 생각한 내가 한심하다는 생각을 했다. 다형성과 추상화 등 객체 프로그래밍에서 가장 중요하다고 첫 장부터 배우는데 말이다. 개념을 정확히 알고 그 개념을 가지고 프로그래밍을 해야 진정한 프로그래머가 아닌가 하는 생각이 든다. <3장. 함수> 편을 읽고 크게 반성한다. 그리고 깨달았다.
궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.
AOP 에 대해 모르겠다. 구조적 프로그래밍 공부를 다시 해야겠다.