본문 바로가기

Snippets

(8)
final, 접근제어자 레거시 코드를 리팩토링을 할 때, final 키워드가 없고 접근제어자가 public 인 메소드를 마주하면, 아래 의문을 계속 확인하면서 작업해야 한다. 이 메소드는 왜 public 이지? 외부에서 사용하는 곳이 있나? 이 메소드를 어디선가 override 해서 사용하고 있나? API 를 만들 때, 이 클래스를 사용할 개발자에게 어디까지 노출할 것인지를 계속 확인해야 한다. public interface A { void a1(); } public class AImpl implements A { @Override public void a1() { a2(); a3(); } public void a2() { .. } private void a3() { .. } } AImpl 의 a1() 메소드는 같은 클래스의 ..
첫 번째 목표 제품의 기존 기능을 다른 형태로 변경하는 작업을 진행한다. 회의를 하다보면, 주제가 "어떻게 변경할지"에서 "기능을 추가하면 어떨까"로 바뀐다. "A 라는 기능이 있으면 좋을 것 같다." 지원하는 기능이야 많으면 많을수록 좋다. 자원이 무한하다면. 아쉽지만 자원은 유한하고, 형태만 바꾸는 것도 어떤 문제가 있을지, 어느정도 걸릴지 장담할 수가 없다. 첫 번째 목표를 다시 확인한다. 제품의 기존 기능을 다른 형태로 변경하는 작업을 진행한다. 그 다음 목표는 첫 번째 목표를 보고 결정하자
Server 와 Client 서버와 클라이언트 기본 개념 서버는 클라이언트의 요청을 처리하고, 클라이언트는 서버에 필요한 것을 요청한다. Server Client 네트워크 관점 웹 서버 웹 브라우저 객체 관점 요청을 처리하는 객체 요청하는 객체 서버(Server)라 하면 대체로 서버 컴퓨터를 생각한다. 서버, 클라이언트 개념은 상당히 넓게 사용된다. 클라이언트(Client)는 의뢰인 이라는 뜻이고, 서버(Server)는 서비스나 상품을 제공하는 사람이나 물건을 뜻한다.
모든 소프트웨어 모듈의 목적 1. 실행 중에 제대로 동작해야 한다. 2. 변경을 위해 존재한다. - 대부분의 모듈은 생명주기 동안 변경되기 때문에 간단한 작업만으로도 변경이 가능해야 한다. - 변경하기 어려운 모듈은 제대로 동작하더라도 개선해야 한다. 3. 코드를 읽는 사람과 소통하는 것이다. - 모듈은 특별한 훈련 없이도 개발자가 쉽게 읽고 이해할 수 있어야 한다. - 읽는 사람과 의사소통할 수 없는 모듈은 개선해야 한다. 즉, 모든 모듈은 제대로 실행돼야 하고, 변경에 용이해야 하며, 이해하기 쉬워야 한다.
Compile Error, Runtime Error Compile Error vs Runtime Error. Compile Error 개발자가 즉시 확인할 수 있다. ex) 시그니처 잘못 기입(메소드 이름, arguments) Runtime Error 사용자가 실행 할 때 발생하는 오류 개발자에게 가장 좋은 에러는 Compile Error 이다. Runtime Error 는 Build 후 배포했을 때, 사용자가 프로그램을 동작하다가 발생하는 에러이다. 막대한 손실이 발생할 수 있다. 가급적이면 컴파일 시점에 오류를 잡을 수 있는게 가장 좋다.
Proxy, Decorator 패턴 프록시 객체가 중간에 있으면, 크게 접근 제어와 부가기능 추가를 수행할 수 있다. 주요기능 접근제어 - 권한에 따른 접근 차단 - 캐싱 - 지연 로딩 부가 기능 추가 - 원래 서버가 제공하는 기능에 더하서 부가 기능을 수행한다. - 요청 값이나, 응답 값을 중간에 변형한다. - 실행 시간을 측정해서 추가 로그를 남긴다. 프록시 패턴, 데코레이터 패턴 프록시 패턴과 데코레이터 패턴 모두 프록시를 사용한다. GoF 디자인 패턴에서는 의도(intent)에 따라서 프록시, 데코레이터 패턴을 구분한다. - 프록시 패턴 : 다른 객체에 대한 접근을 제어하기 위해 대리자를 제공 - 데코레이터 패턴 : 객체에 추가 책임(기능)을 동적으로 추가하고 기능 확장을 위한 유연한 대안 제공 프록시를 사용하고 해당 프록시가 접근..
Callback 정의 Callback - 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 콜백(callback) 이라 한다. 정의 - 프로그래밍에서 콜백(callback) 또는 콜애프터 함수 (call-after function)는 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다. 콜백을 넘겨받은 코드는 이 콜백을 필요에 따라 즉시 실행할 수도 있고, 아니면 나중에 실행할 수도 있다. 코드가 호출(call)은 되는데 코드를 넘겨준 곳의 뒤(back)에서 실행된다는 뜻 자바언어에서 콜백 - 자바 언어에서 실행 가능한 코드를 인수로 넘기려면, 객체가 필요하다 - 자바 8 이전에는 보통 하나의 메소드를 가진 인터페이스를 구현하고, 주로 익명 내부 클래스를 사용했다. - 자바 8 부터는 람다를 사용한다.
좋은 설계 좋은 설계는 변하는 것과 변하지 않는 것을 분리하는 것이다. 좋은 설계는 변경이 일어날 때 자연스럽게 드러난다. 단일 책임 원칙(Single Responsibility Principle) - 변경 지점을 하나로 모아서 변경에 쉽게 대처할 수 있는 구조를 만든 것.