목록추상화 (3)
개발자는 기록이 답이다
3. 역할 역할과 협력 객체는 협력이라는 주어진 문맥안에서 특정한 목적을 갖게 되고, 객체의 목적은 협력 안에서 객체가 맡게 되는 책임의 집합으로 표시된다. 이처럼 객체가 어떤 특정한 협력 안에서 수행하는 책임의 집합을 역할이라고 부른다. 영화예매 협력에서 "예매하라"라는 메시지를 처리하기에 적합한 객체로 Screening을 선택했다. 하나의 단계처럼 보이는 이 책임 할당 과정은 실제로 두 개의 독립적인 단계가 합쳐진 것이다. 1. 영화를 예매할 수 있는 적절한 역할이 무엇인가 찾는다 2. 역할을 수행할 객체로 Screening 인스턴스를 선택한다 역할에 특별한 이름을 부여하지 않았지만 실제로는 익명의 역할을 찾고 그 역할을 수행할 수 있는 객체를 선택하는 방식으로 설계가 진행된 것이다. Screenin..
4. 상속과 다형성 Movie클래스 어디에서도 할인 정책이 금액인지 비율인지 판단하지 않는다. Movie 내부에 할인 정책을 결정하는 조건문이 없음에도 어떻게 영화 요금을 계산할 때 할인 정책을 선택할 수 있었을까? public class Movie { private String title; private Duration runningTime; private Money fee; private DiscountPolicy discountPolicy; // 금액할인? 비율할인? public Movie(String title, Duration runningTime, Money fee, DiscountPolicy discountPolicy) { this.title = title; this.runningTime =..
시스템콜 시스템콜이란 운영체제가 커널에 접근하기 위한 인터페이스이며 유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 이를 거쳐서 호출하도록 설계되어있습니다. 프로세스 관리(생성, 삭제 등), 파일관리, 디바이스 관리, 시간 및 날짜 관련 시스템, 프로세스 간 통신 때 이를 통해 커널함수를 호출합니다. 예를 들어 프로세스를 종료하는 kill()이라는 함수가 있습니다. 이 함수를 발동시키면 시스템콜을 거쳐서 커널함수가 호출되게 됩니다. 시스템 콜의 과정 만약 유저프로그램이 I/O 요청을 위한 트랩을 발동했다고 하면 다음과 같은 과정이 발생됩니다 유저 프로그램이 I/O 요청 트랩발동합니다. 올바른 I/O 요청인지 확인합니다. 유저 모드가 시스템콜을 통해 커널모드로 변환합니다. 이후 커널함..