Java (19) 썸네일형 리스트형 [HeadFirst] 5장 싱글턴 패턴 용도 인스턴스를 한개 만 쓰기 위해서 특정 클래스에 객체 인스턴스가 하나만 만들어지도록 해줄때 전역 변수 대신 사용하기 위해, 전역 변수는 애플리케이션이 시작될 때 객체가 생성되는데, 자원을 많이 차지하게 됨 연결 풀이나 스레드 풀과 같은 자원풀을 사용할 때 싱글턴 패턴 클래스 인스턴스를 하나만 만들고, 그 인스턴스로의 전역 접근을 제공합니다. 다른 어떤 클래스에서도 자신의 인스턴스를 추가로 만들지 못하게 해야한다. 필요하다면 클래스 자신을 거치도록 하게 합니다. 어디서든 그 인스턴스에 접근할 수 있도록 전역 접근 지점을 제공합니다. 리플렉션, 직렬화, 역질렬화에서 문제가 발생할 수 있다. (enum으로 싱글턴을 생성하면 해결가능) 멀티스레딩 문제 해결하기 인스턴스를 가져오는 함수에 synchronize.. [HeadFirst] 4장 팩토리 패턴 new 연산자가 눈에 띈다면 '구상'이라는 용어를 떠올리자 new를 사용하면 구상 클래스의 인스턴스가 만들어진다 인터페이스가 아닌 특정 구현을 사용하는 코드가 된다. 구상 클래스를 바탕으로 코딩하면 나중에 코드를 수정해야 할 가능성이 커지고 유연성이 떨어진다. 구상 클래스의 인스턴스 생성 부분을 나무지 부분으로 캡슐화 하자 Duck duck; if(picnic){ duck = new simpleDuck(); }else if(hunting){ duck = new DecoyDuck(); }.... 객체 생성 부분 캡슐화 객체 생성을 처리하는 클래스를 팩토리라고 부릅니다. 객체 생성 부분을 전담할 클래스를 정의해서 사용한다. 객체 생성 작업을 팩토리 클래스로 캡슐화 해놓으면 구현을 변경할 때 팩토리 클래스 하.. [HeadFirst] 3장 데코레이션 패턴 상속을 사용한다고 해서 무조건 유연하거나 관리하기 쉬운 디자인이 만들어지진 않는다. 구성과 위임으로 실행 중에 행동을 상속하는 방법이 있다. 객체를 동적으로 구성하면 기존 코드를 고치는 대신 새로운 코드를 마늗ㄹ어서 기능을 추가할 수 있다. 디자인 원칙 클래스는 확장에는 열려 있어야 하지만 변경에는 닫혀있어야 한다. 모순처럼 보이지만 직접 코드를 수정하지 않고도 코드를 확장할 수 잇게 해주는 기법이 있다. 코드에서 확장해야 할 부분을 선택할 때는 세심한 주의를 기울여야 한다. 무조건 Open-Closed Psrinciple을 적용한다면 괜히 쓸떼 없는 일을 하며 시간을 낭비할 수 있으며, 필요 이상으로 복잡하고 이해하기 힘든 코드를 만들게 되는 부작용이 발생할 수 있다. 객체 장식 EX DarkRoast.. [헤드퍼스트] 2장 옵저버 패턴 옵저버 패턴의 작동 원리 1. 객체가 등장해서는 주제한테 자기도 옵저버가 되고 싶다고 이야기합니다. 2. 옵저버 등록을 합니다. 3. 주제값이 바뀌면 모든 옵저버가 주제 값이 바뀌었다는 연락을 받습니다. 4. 기존 등록되어있는 객체가 탈퇴하고 싶다는 요청을 합니다. 5. 주제에 새로운 값이 등록되더라도 탈퇴한 객체는 연락을 받지 않습니다. 옵저버 패턴 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의합니다. 한 객체의 상태가 변경되면 그 객체에 의존하는 모든 객체에 연락이 갑니다. 옵저버 패턴은 신문사와 구독자로 이어지는 신문 구독 서비스와 비슷합니다. 주제가 상태를 저장하고 제어합니다. 따라서 상태가 들어이는 객체는 하나만 있.. [헤드퍼스트] 1장 전략패턴 클래스에 메서드를 추가할 상황일때(유연하지 않게 만든다면) 서브클래스에 상속을 이용해 구현(어떤 클래스는 추가된 메서드를 사용 안 할 수 있음 인터페이스를 사용해 구현(인터페이스를 구현해서 만든 코드를 재사용할 수 없음) 디자인원칙 애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분과 분리한다. 바뀌는 부분은 따로 뽑아서 캡슐화한다. 그러면 나중에 바뀌지 않는 부분에는 영향을 미치지 않고 그 부분만 고치고나 확장할 수 있다. 구현보다는 인터페이스에 맞춰서 프로그래밍한다. 서브클래스에서 자체적 구현 X 클래스에서 구체적 구현 X 인터페이스를 구현한 별도의 클래스를 사용 > 클래스는 인터페이스를 사용하면 구체적으로 구현할 필요가 없어진다. 인터페이스에 맞춰서 프로그래밍한다는 말은 상위 형식에 맞춰.. POJO 특정 자바 모델이나 기능, 프레임워크 등을 따르지 않은 자바 오브젝트를 지칭 POJO는 특정 규약, 환경에 종속되지 않는다. 만약 POJO를 사용하지 않는다면 다음과 같은 문제점을 야기한다. 객체지향적인 설계기법 적용하기 어려워진다. 다른 환경에서 사용하기 어렵다. 독립적으로 테스트하기 어려워진다. 예를 들어 웹환경에 종속되는 HttpServletRequest나 HttpSession와 관련된 API를 POJO에서는 직접 이용하지 않는다. POJO란 객체지향적인 원리에 충실하면서, 특정 환경과 규약에 종속되지 않아 필요에 따라 재사용될 수 있는 방식으로 설계된 오브젝트라 할 수 있다. POJO의 장점 특정 규약에 종속되지 않아 객체지향 설계를 할 수 있게 된다. 특정 환경에 종속되지 않아 테스트 하기 좋다.. 객체지향개념(4)_추상클래스&메서드, 인터페이스 1. 추상 클래스 클래스가 설계도라면 추상 클래스는 미완성 설계도 추상메서드를 포함하고 있는 클래스 인스턴스 생성 불가능 다른 클래스를 작성하는 데 도움을 줄 목적으로 작성된다. 여러 클래스에 공통적으로 사용될 수 이쓴ㄴ 추상 클래스를 바로 작성하거나 기존 클래스의 공통 부분을 뽑아 만든다. 2. 추상 메서드 선언부만 있고 구현부가 없는 메서드 일반 메서드가 추상메서드를 호출할 수 있다. 꼭 필요하지만 자손마다 다르게 구현될 것으로 예상되는 경우에 사용 추상클래스를 상속받는 자손클래스에서 추상메서드의 구현부를 완성해야 한다. 3. 인터페이스 일종의 추상클래스 (추상클래스 보다 추상화 정도가 높다.) 실제 구현된 것이 전혀 없는 기본 설계도 추상 메서드와 상수만을 멤버로 가질 수 있다. (8버전 부터는 디.. 객체지향개념(3)_제어자, 다형성 1. 제어자 클래스, 변수, 메서드의 선언부에 사용되어 부가적인 의미 부여 제어자는 형용사 처럼 쓰인다. 접근제어자는 단 한 번만 사용가능하다. 1_1 final 클래스 : 확장될 수 없는 클래스가 된다.(다른 클래스의 조상이 될 수 없다) 메서드 : 변경될 수 없는 메서드 (오버라이딩을 통해 재정의 될 수 없다) 변수 : 값을 변경할 수 없는 상수가 된다. (! 생성자를 통해 초기화는 가능하다) 1_2 abstract 클래스 : 추상 메서드가 선언되어 있음을 의미한다. 메서드 : 선언부만 작성하고 구현부는 작성하지 않은 메서드임을 알린다. 1_3 접근제어자 멤버 또는 클래스에 사용되어 외부로 부터 접근을 제한한다. 클래스, 멤버변수, 메서드, 생성자에 사용가능 생성자의 접근 제어자는 보통 클래스의 접근.. 이전 1 2 3 다음