목록전산학 (23)
배고픈 개발자 이야기

팩토리 메서드 패턴은 객체지향 디자인 패턴이다. Factory method는 부모(상위)클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며, 자식(하위) 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴이기도 하다. 부모(상위) 클래스 코드에 구체 클래스 이름을 감추기 위한 방법으로도 사용한다. Factory Method라는 패턴 이름이 적절하지 못한데, 이름으로 인해 객체를 생성하는 메소드를 Factory method라 오해하는 개발자가 많이 있다. 이런 생성 메소드가 모두 Factory method 패턴을 사용하는 것은 아니다. Template Method의 생성 패턴 버전으로 볼 수 있는데 Template method를 알지 못한다면 그 패턴을 먼저 이해하는 것이 Factory Method를..

커맨드 패턴이란 요청을 객체의 형태로 캡슐화 하여 사용자가 보낸 요청을 나중에 이용할 수 있도록 매서드 이름, 매개변수 등 요청에 필요한 정보를 저장 또는 로깅, 취소할 수 있게 하는 패턴이다. 커맨드 패턴에는 명령(command), 수신자(receiver), 발동자(invoker), 클라이언트(client)의 네개의 용어가 항상 따른다. 커맨드 객체는 수신자 객체를 가지고 있으며, 수신자의 메서드를 호출하고, 이에 수신자는 자신에게 정의된 메서드를 수행한다. 커맨드 객체는 별도로 발동자 객체에 전달되어 명령을 발동하게 한다. 발동자 객체는 필요에 따라 명령 발동에 대한 기록을 남길 수 있다. 한 발동자 객체에 다수의 커맨드 객체가 전달될 수 있다. 클라이언트 객체는 발동자 객체와 하나 이상의 커맨드 객..

옵저버(특정 목록의 변화 관찰)로 객체에 등록하여 객체가 직접 통지하도록 하는 패턴 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용된다. + 발행/구독 모델 1) 기본구성 어떤 상태를 관리하는 Subject 객체(상태머신,생산자,Observable)가 있고 , 이 객체에서 일어나는 상태 변화에 따라서 해당 이벤트를 받길 원하는 옵저버(관찰자,소비자)들은 매니져 객체에 자신을 등록 한다 그 후에, Subject 객체에서 어떤 상태가 변경 되었을 때 , 자신에게 등록된 옵저버들에게 이벤트를 notify 해주는게 옵저버 패턴의 주요 골자이며, Subject 객체는 관찰자들에 대해서 유연하게 커플링 되어 있게 된다. 즉 매니저 객체가 소비자들에 대해서 정확한 정보를 알 필요가 없이, 소비자들이 알아서 Sub..

캡슐화를 통해 코드의 중복이 없이 재사용 가능하게 하는 패턴 스트래티지를 활용하여 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘 변경할 수 있다. ex1) 추상 동물 클래스와 일반적인 방법으로 상속받는 Eagle / Tiger 객체 - 속성 : cry / display ex1)에서 추가 속성으로 fly 메소드를 추가하면 추상 클래스를 상속 받는 객체들은 모두 속성을 호출할 수 있다. 하지마 fly는 모든 Animal의 공톡 속성이 아니므로 문제가 있고 - 이를 구분해 주어야 한다. ex2) 추가 속성의 공통 속성 문제를 해결하기 위해 fly 메소드를 인터페이스로 추가 fly를 객체마다 따로 구분해주기 위해 인터페이스로 구현하였지만 fly 인터페이스를 객체에 따라 구분해 주어야 할 필요성이 생기게 되..
Chapter23 디버깅 디버깅은 소프트웨어 개발의 성공과 실패를 좌우한다. 가장 좋은 접근 방법은 결함을 처음부터 피하기 위해 이 책에서 소개하고 있는 다른 기법들을 사용하는 것이다. 하지만 디버깅 기술을 향상시키는 데 시간을 투자할 가치가 있다. 왜냐하면 디버깅을 잘하는 사람과 못하는 사람 간의 수행 능력이 적어도 10배 정도 차이가 나기 때문이다. 오류를 찾고 수정하는 체계적인 접근 방법은 성공에 매우 중요하다. 각 테스트가 한 걸음 나아갈 수 있도록 디버깅에 초점을 맞춘다. 과학적인 디버깅 방법을 사용하라. 문제를 수정하기 전에 문제의 원인을 이해하라. 오류의 원인에 대해서 임의로 추측하고 수정하면, 프로그램은 수정을 시작했을 때보다 더 나쁜 상태가 될 것이다. 컴파일러의 경고를 가장 까다로운 수..
Chapter1. 소프트웨어 구현으로의 초대 요구사항, 아키텍처 - 구현을 효율적으로 하기 위해 선행됨 구현 시스템 테스트 - 구현이 정확하게 수행되는지 검증 Chapter2. 소프트웨어 개발의 이해를 돕기 위한 비유 비유는 모든 사람이 이해 할 수 있고 불필요한 실수를 줄여 줄 수 있다. 답을 어디서 찾을지가 아니라 어떻게 찾을지 알 수 있다. 편지를 쓰는것?(작은 프로젝트, 씨를 심고 곡물을 기르는것?(작은 부분을 추가 - 오류 최소화 ) 골격(더미 클래스) -> 근육과 피부(실질적 클래스) 발견적 학습, 알고리즘x Chapter3. 준비는 철저하게 : 선행 조건 아키텍처와 설계, 프로젝트 계획 수립이 성공적인 프로젝트에 필요함, 위험 절감 논리적 설득 - 프로젝트의 규모에 따른 계획수립의 중요성 :..
Object Oriented Programming 객체 지향 프로그래밍. 저도 잘 모르고 너무 거대한 부분이라서 넣을지 말지 많은 고민을 했습니다만, 면접에서 이 정도 이야기 하면 되지 않을까?하는 생각에 조심스레 적어봤습니다. 객체 지향 프로그래밍 이전의 프로그래밍 패러다임을 살펴보면, 중심이 컴퓨터에 있었다. 컴퓨터가 사고하는대로 프로그래밍을 하는 것이다. 하지만 객체지향 프로그래밍이란 인간 중심적 프로그래밍 패러다임이라고 할 수 있다. 즉, 현실 세계를 프로그래밍으로 옮겨와 프로그래밍하는 것을 말한다. 현실 세계의 사물들을 객체라고 보고 그 객체로부터 개발하고자 하는 애플리케이션에 필요한 특징들을 뽑아와 프로그래밍 하는 것이다. 이것을 추상화라 한다. OOP로 코드를 작성하면 이미 작성한 코드에 대..

Implementation Page Cache는 메모리 관리할 때 필요한건 올려놓고 필요없는건 쫒아냄 - 4Kbyte Buffer Cache 운영체제가 파일 I/O를 할 때 디스크에서 전달받은 내용을 읽어놓고 카피를 하여 전달함 - 512byte Memory-Mapped (I/O or FILE) - 프로세스 주소공간 중 일부를 파일에 Mapping을 해놓음 : 처음에만 system call 그 다음부턴 system call(운영체제 도움)없이 입출력 read(), write()는 운영체제 도움을 받아야함 I/O는 Buffer Cache를 통과해야함 자신이 CPU를 갖고 있으면서 직접 접근함 -mmap