분류 전체보기

    오브젝트 :: Chap4 - 설계 품질과 트레이드오프

    오브젝트 :: Chap4 - 설계 품질과 트레이드오프

    책임 주도 설계라는 이름에서 알 수 있듯 역할, 책임, 협력 중에서 가장 중요한 것은 책임 ! 책임이 객체지향 자체의 품질을 결정하는 것. 객제치향 설계란 올바른 객체에게 올바른 책임을 할당하면서 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 활동 ! 설계는 변경을 위해 존재하고 변경에는 어떤 식으로든 비용이 발생한다. 훌륭한 설계란 합리적인 비용 안에서 변경을 수용할 수 있는 구조로 만드는 것이다. 결합도와 응집도를 합리적인 수준으로 유지하려면 객체의 상태가 아니라 객체의 행동에 초점을 맞추어야 한다. 객체를 단순한 데이터의 집합으로 바라보면 객체 내부 구현을 퍼블릭 인터페이스에 노출시키는 결과를 낳기 때문에 설계가 변경에 취약해짐 이번 장에서는 영화 예매 시스템을 책임이 아닌 상태를 표현하는 데이..

    Nginx :: Address already in use 해결법

    Nginx :: Address already in use 해결법

    Nginx 를 구동시키다보면 다음과 같은 에러가 나올 때가 있다. 80포트와 443포트가 이미 사용중이라고 나온다. 결론 sudo fuser -k 80/tcp 위 명령어를 입력하면 80포트를 사용중인 프로세스를 죽일 수 있다. fuser 는 어떤 프로세스가 파일이나 소켓을 사용하는지 알려주는 명령어. -k 나 -kill 옵션을 사용하면 특정 파일이나 디렉토리를 사용하는 모든 프로세스에게 SIGKILL 을 전송할 수 있다.

    오브젝트 :: Chap3 - 역할, 책임, 협력

    오브젝트 :: Chap3 - 역할, 책임, 협력

    객체지향 패러다임 관점에서 핵심은 역할(role), 책임(responsibility), 협력(collaboration) ! 객체지향의 본질은 협력하는 객체들의 공동체를 창조 하는 것 ! 협력을 구성하기 위해 적절한 객체를 찾고, 적절한 책임을 할당 하는 과정이 핵심이다. 협력 영화 예매 시스템 돌아보기 객체지향 원칙을 따르는 어플리케이션의 제어 흐름은 특정 한 객체에 의해 통제되지 않고 다양한 객체들 사이에 균형 있게 분배되는 것이 일반적이다. 객체들이 어플리케이션의 기능을 구현하기 위해 수행하는 상호작용을 협력 이라고 한다. 객체가 협력에 참여하기 위해 수행하는 로직은 책임, 객체들이 협력 안에서 수행하는 책임들이 모여 객체가 수행하는 역할 을 구성한다. 협력 두 객체 사이 협력은 하나의 객체가 다른 ..

    오브젝트 :: Chap2 - 객체지향 프로그래밍

    오브젝트 :: Chap2 - 객체지향 프로그래밍

    간단한 온라인 영화 예매 시스템을 통해 객체지향 프로그래밍을 접해보자 영화 예매 시스템 용어 영화 : 영화에 대한 기본 정보 (제목, 상영시간, 가격 정보) 상영 : 실제로 관객들이 영화를 관람하는 사건 사용자가 실제로 예매하는 대상은 영화가 아니라 상영 ! 요구사항 특정 조건을 만족하는 예매자는 요금 할인받기 가능 할인액을 결정하는 두 가지 규칙 할인 조건 순서 조건 : 상영 순번을 이용해 할인 여부 결정 예시) 순번이 10인 경우 매일 10번째 상영 영화 할인 기간 조건 : 상영 시작 시간을 이용해 할인 여부 결정 예시) 월요일, 시작시간 오전 10시, 종료시간 오후 1시인 모든 영화 할인 할인 정책 금액 할인 정책 : 예매 요금에서 일정 금액 할인 예시) 영화 9000원, 금액할인정책 800원 → ..

    Java :: 예외 처리

    Java :: 예외 처리

    프로그램 오류 프로그램 오류의 종류 컴파일 에러 : 컴파일할 때 발생하는 에러 런타임 에러 : 실행할 때 발생하는 에러 논리적 에러 : 사용자의 작성 의도와는 다른 동작 수행 예외처리 정의와 목적 Java 의 런타임 에러 - 에러(Error)와 예외(Exception) 에러 (Error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류 예외 (Exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류 예외처리 정의와 목적 정의 : 프로그램 실행 시 발생할 수 있는 예외의 발생에 대비한 코드를 작성 목적 : 프로그램의 비정상 종료를 막고, 정상 실행상태를 유지하는 것 예외 클래스의 계층구조 RuntimeException 클래스들 : 프로그래머의 실수로 발생하는 예외 Except..

    Java :: 어노테이션(Annotation)

    Java :: 어노테이션(Annotation)

    어노테이션(Annotation) 주석처럼 프로그래밍 언어에 영향을 미치지 않으며, 유용한 정보를 제공 @Test // 이 메소드가 테스트 대상임을 테스트 프로그램에게 알림 ! public void method() { ... } 표준 어노테이션 Java 에서 제공하는 어노테이션 @Override 오버라이딩을 올바르게 했는지 컴파일러가 체크하게 함 오버라이딩할 때 메소드 이름을 잘못 적는 실수 등 발생 가능 class Parent { void parentMethod() {} } class Child extends Parent { void parentmethod() {} } 오버라이딩 하려고 했으나 실수로 이름 잘못 적었을 때 ! class Child extends Parent { @Override void ..

    Java :: 열거형 - Enumeration

    Java :: 열거형 - Enumeration

    열거형(Enumeration) 관련된 상수들을 같이 묶어 놓은 것 Java 는 타입에 안전한 열거형을 제공 class Menu { enum CoffeeMenu { ESPRESSO, AMERICANO, LATTE } enum TeaMenu { GREEN_TEA, YUTU_TEA } CoffeeMenu coffeeMenu; TeaMenu teaMenu; } 안전한 열거형이란 무슨 의미일까? 예를 들어 아래처럼 열거형을 사용하지 않고 상수로 관리한다고 생각해보자. class Menu { static int ESPRESSO = 0; static int AMERICANO = 1; static int LATTE = 2; static int GREEN_TEA = 0; static int YUJU_TEA = 1; } ..

    Java :: 팩토리(Factory) 메소드 패턴

    Java :: 팩토리(Factory) 메소드 패턴

    팩토리(Factory) 메소드 패턴 객체 생성 처리를 서브 클래스로 분리하여 처리하도록 캡슐화하는 패턴 특정 입력값에 따라 다른 객체를 생성해야 할 때, 분기에 따라서 객체를 생성할 때 팩토리 메소드 패턴을 적용하면 좋다. 조건에 따라 객체를 생성하는 공장을 만드는 느낌 ! 장점 객체간의 결합도가 낮아지고 유지보수에 용이해짐 객체들을 한 곳에서 관리할 수 있게 됨 메소드로 작동하기 때문에 리턴 값으로 서로 다른 객체를 반환할 수 있음 단점 불필요하게 많은 클래스를 정의하게 될 수 있음 예시 코드 팩토리 메소드 패턴 적용 전 abstract class Item { } class OrangeJuice extends Item { OrangeJuice() { System.out.println("오렌지쥬스 생성"..