이전자료
[Clean Code] - 3장 함수(1)
도입 프로그래밍 초창기 시스템은 루틴, 하위 루틴으로 나누어짐. 포트란, PL/1 시절에는 시스템을 프로그램, 하위 프로그램, 함수로 나눔. 지금은 함수만 남아있으며 어떤 프로그램이든 가장 기
leapday.tistory.com
방법 7) 부수 효과를 일으키지 마라!
- 때때로 함수를 통해 클래스 변수를 수정한다.
- 떄로는 함수로 넘어온 인수나 시스템 전역 변수를 수정한다.
- 이러한 경우들은 시간적인 결합(Temporal Coupling)이나 순서 종속성(Order Dependency)을 초래한다.
boolean checkPassword(String userName, String password){
...
//if userName and password are valid
Session,initialize();
...
}
위 함수는 겉으로는 비밀번호를 체크한다고 되어있지만 내부에서는 초기화를 진행한다. 이는 위험할 수 있다.
이런 부수효과가 시간적인 결합을 초래 ⇒ 결구, 혼란을 일으킴.
TIP) 출력 인수
appendFooteR(s);
public void appendFooter(StringBuffer report);
위에 있는 함수 사용 예시만 보면 정확한 뜻 파악이 어렵고, 선언부를 봐야하는 수고로움을 거침. 따라서
report.appendFooteR()
와 같이 사용을 권장.
방법 8) 명령과 조회를 분리하라!
- 함수는 뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만 해야함.
- 객체 상태를 변경 or 객체 정보를 반환 둘 중 하나만 해야함.
- 흔히 말하는 setter, getter를 사용하는 이유
방법 9) 오류 코드보다 예외를 사용하라!
- 대게 if~else 문으로 오류 코드를 분류함.
- 하지만, 이는 정상 동작과 오류 처리 동작을 구분하기 어려움을 초래하며, if문이 중첩될수록 더욱 심화됨.
- 따라서, 제시한 방법을 하길 권고
TIP)
- Try/Catch 블록 뽑아내기
- 오류 처리도 “한 가지” 작업
- Error.java 의존성 자석(예외처리 분리)
방법 10) 반복하지 마라!
- “반복”이라는 것은 일을 여러ㅂ번 하게되는 것.
- 이는 코드의 양을 증가시키고, 알고리즘이 변경되면 여러 곳을 신경써야함.
- 중복은 소프트웨어에서 악의 근원이다.
- 중복 제거 전략으로는 구조적 프로그래밍, AOP(Aspected Oriented Programming), COP(Component Oriented Programming) 등이 있다.
방법 11) 구조적 프로그래밍
- 에츠허르 데이크스트라(Edsger Dijstra)의 구조적 프로그래밍은 모든 함수와 함수 내 모든 블록에 입구(entry)와 출구(exit)가 하나만 존재해야한다고 말함.
- 즉, 함수는 return 문이 하나여야 하고, 루프 안에서 break, continue, goto를 사용하면 안됨.
- 하지만, 절대 원칙은 아니고 작은 함수에서는 사용이 용이할 수도 있음.
방법 12) 함수를 어떻게 짜죠?
- 그래서 이 많은 방법들을 어떻게 활용해야하는가?
- 소프트웨어를 짜는 행위는 여느 글짓기와 동일하다고 보임.
- 먼저 생각을 한 후 읽기 좋게 다듬음. 초안을 작성하고 수정, 수정, 수정
결론
- 모든 시스템은 특정 응용 분야 시스템을 기술할 목적으로 프로그래머가 설계한 도메인 특화 언어(DSL: Domain Specific Language)로 만들어짐
- 실력 있는 프로그래머들은 시스템을 프로그램이 아니라 하나의 풀어나갈 이야기로 여김.
- 함수는 그 언어의 동사이며 클래스는 명사이고 이를 잘 풀어나가는 것 그것이 함수를 잘짜고, 좋은 코드를 만드는 길이다.
원본 노션 링크
[Clean Code] - 3장 함수(2)
방법 7) 부수 효과를 일으키지 마라!
leapday.notion.site
'[Book] > Clean Code' 카테고리의 다른 글
[Clean Code] - 4장 주석(1) 좋은 주석이란? (1) | 2023.02.13 |
---|---|
[Clean Code] - 3장 함수(1) (0) | 2023.02.07 |
[Clean Code] - 2장 의미 있는 이름 (0) | 2023.01.26 |
[Clean Code] - 1장 깨끗한 코드 (2) | 2023.01.17 |
이전자료
[Clean Code] - 3장 함수(1)
도입 프로그래밍 초창기 시스템은 루틴, 하위 루틴으로 나누어짐. 포트란, PL/1 시절에는 시스템을 프로그램, 하위 프로그램, 함수로 나눔. 지금은 함수만 남아있으며 어떤 프로그램이든 가장 기
leapday.tistory.com
방법 7) 부수 효과를 일으키지 마라!
- 때때로 함수를 통해 클래스 변수를 수정한다.
- 떄로는 함수로 넘어온 인수나 시스템 전역 변수를 수정한다.
- 이러한 경우들은 시간적인 결합(Temporal Coupling)이나 순서 종속성(Order Dependency)을 초래한다.
boolean checkPassword(String userName, String password){
...
//if userName and password are valid
Session,initialize();
...
}
위 함수는 겉으로는 비밀번호를 체크한다고 되어있지만 내부에서는 초기화를 진행한다. 이는 위험할 수 있다.
이런 부수효과가 시간적인 결합을 초래 ⇒ 결구, 혼란을 일으킴.
TIP) 출력 인수
appendFooteR(s);
public void appendFooter(StringBuffer report);
위에 있는 함수 사용 예시만 보면 정확한 뜻 파악이 어렵고, 선언부를 봐야하는 수고로움을 거침. 따라서
report.appendFooteR()
와 같이 사용을 권장.
방법 8) 명령과 조회를 분리하라!
- 함수는 뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만 해야함.
- 객체 상태를 변경 or 객체 정보를 반환 둘 중 하나만 해야함.
- 흔히 말하는 setter, getter를 사용하는 이유
방법 9) 오류 코드보다 예외를 사용하라!
- 대게 if~else 문으로 오류 코드를 분류함.
- 하지만, 이는 정상 동작과 오류 처리 동작을 구분하기 어려움을 초래하며, if문이 중첩될수록 더욱 심화됨.
- 따라서, 제시한 방법을 하길 권고
TIP)
- Try/Catch 블록 뽑아내기
- 오류 처리도 “한 가지” 작업
- Error.java 의존성 자석(예외처리 분리)
방법 10) 반복하지 마라!
- “반복”이라는 것은 일을 여러ㅂ번 하게되는 것.
- 이는 코드의 양을 증가시키고, 알고리즘이 변경되면 여러 곳을 신경써야함.
- 중복은 소프트웨어에서 악의 근원이다.
- 중복 제거 전략으로는 구조적 프로그래밍, AOP(Aspected Oriented Programming), COP(Component Oriented Programming) 등이 있다.
방법 11) 구조적 프로그래밍
- 에츠허르 데이크스트라(Edsger Dijstra)의 구조적 프로그래밍은 모든 함수와 함수 내 모든 블록에 입구(entry)와 출구(exit)가 하나만 존재해야한다고 말함.
- 즉, 함수는 return 문이 하나여야 하고, 루프 안에서 break, continue, goto를 사용하면 안됨.
- 하지만, 절대 원칙은 아니고 작은 함수에서는 사용이 용이할 수도 있음.
방법 12) 함수를 어떻게 짜죠?
- 그래서 이 많은 방법들을 어떻게 활용해야하는가?
- 소프트웨어를 짜는 행위는 여느 글짓기와 동일하다고 보임.
- 먼저 생각을 한 후 읽기 좋게 다듬음. 초안을 작성하고 수정, 수정, 수정
결론
- 모든 시스템은 특정 응용 분야 시스템을 기술할 목적으로 프로그래머가 설계한 도메인 특화 언어(DSL: Domain Specific Language)로 만들어짐
- 실력 있는 프로그래머들은 시스템을 프로그램이 아니라 하나의 풀어나갈 이야기로 여김.
- 함수는 그 언어의 동사이며 클래스는 명사이고 이를 잘 풀어나가는 것 그것이 함수를 잘짜고, 좋은 코드를 만드는 길이다.
원본 노션 링크
[Clean Code] - 3장 함수(2)
방법 7) 부수 효과를 일으키지 마라!
leapday.notion.site
'[Book] > Clean Code' 카테고리의 다른 글
[Clean Code] - 4장 주석(1) 좋은 주석이란? (1) | 2023.02.13 |
---|---|
[Clean Code] - 3장 함수(1) (0) | 2023.02.07 |
[Clean Code] - 2장 의미 있는 이름 (0) | 2023.01.26 |
[Clean Code] - 1장 깨끗한 코드 (2) | 2023.01.17 |