본문 바로가기

CS18

[클린코드] chapter-8 경계 서드파티 코드 사용하기 인터페이스를 "제공하는" 입장과 "사용하는" 입장 사이에는 필연적인 긴장감이 존재한다. "제공하는" 입장에서는 좀 더 다양한 환경에서 좀 더 많은 사용자가 사용할 수 있도록 다양한 사용성을 지향한다. "사용하는" 입장에서는 그들의 사용성에 맞는 specific한 인터페이스를 원한다. 이것을 "경계에서의 긴장"이라 부른다. 만약 우리가 Sensor클래스를 저장하는 Map객체를 사용한다면 다음과 같은 형태일 것이다. Map sensors = new HashMap(); Sensor s = (Sensor) sensors.get(sensorId); 이와 같은 방식은 Sensor클래스를 사용하는 코드 전반에 걸쳐 빈번히 사용된다. 하지만 이는 사용되는 곳에서 캐스팅의 부담을 안게 된다. 그리.. 2022. 9. 5.
[클린코드] chapter-7 오류처리 오류 처리 코드로 인해 프로그램 논리를 이해하기 어려워진다면 깨끗한 코드라 부르기 어렵다 오류 코드보다 예외를 사용해라 오류 코드를 반환하는 것이 아니라 예외를 사용해라 실제 로직과 예외처리 부분이 나뉘어져 깔끔해진다 미확인 예외를 사용하라 checkedException을 사용하면 OCP 원칙에 어긋난다 하위 모듈이 checked 예외를 던지면 상위 모든 모듈이 throw를 선언부에 추가해야 한다 아주 중요한 라이브러리에서 예외를 꼭 처리해야 하는 경우를 제외하고는 uncheckedException을 사용해라 예외에 의미를 제공해라 예외를 던질 때 전후 상황을 충분히 덧붙인다 그러면 오류가 발생한 원인과 위치를 찾기 쉬워진다 오류 메시지에 정보를 담아 예외와 함께 던져라 호출자를 고려해 예외 클래스를 정.. 2022. 9. 1.
[클린코드] chapter-6 객체와 자료구조 자료 추상화 public class Point { public double x; public double y; } public interface Point { double getX(); double getY(); void setCartesian(double x, double y); double getR(); double getTheta(); void setPolar(double r, double theta); } 밑의 클래스는 구현을 완전히 숨기지만 접근 정책을 강제한다 좌표를 읽을 때는 각 값을 개별적으로 읽어야 하고 좌표를 설정할 때는 두 값을 한꺼번에 설정해야 한다 위의 클래스는 변수를 private 으로 설정하더라도 각 값마다 get이나 set을 제공한다면 구현을 외부로 노출한다 함수만 넣는 것이.. 2022. 8. 28.
blocking, non-blocking, Sync, Async 블로킹과 논블로킹은 프로세스의 유휴 상태에 대한 개념이라면, 동기와 비동기는 프로세스의 수행 순서 보장에 대한 매커니즘이다. 제어권 제어권은 자신의 코드를 실행할 권리같은 것 제어권을 가진 함수는 자신의 코드를 끝까지 실행한 후, 자신을 호출한 함수에게 돌려준다 결과값을 기다린다는 것 A함수에서 B 함수를 호출했을 때, A 함수가 B 함수의 결과값을 기다리느냐의 여부 Blocking과 Non-blocking A함수가 B 함수를 호출했을 때, 제어권을 어떻게 처리하느냐에 따라 달라진다. Blocking A 함수가 B 함수를 호출하면, 제어권을 A가 호출한 B 함수에 넘겨준다 제어권을 받은 B는 함수를 실행하고, A는 B에게 제어권을 넘겨주었기 때문에 함수 실행을 잠시 멈춘다 B함수는 실행이 끝나면 자신을 .. 2022. 8. 27.