전체 글
-
아이템4. 인스턴스화를 막으려거든 private 생성자를 사용하라책/이펙티브자바 2021. 6. 20. 13:55
정적 필드와, 정적 메소드만 담은 유틸리티 클래스는 인스턴스로 만들어 사용하려고 설계한것이 아닌데 생성자를 명시해주지 않는다면 컴파일러가 자동으로 기본 생성자를 만들어준다. → 인스턴스화를 막고싶다면 private 생성자를 만들어준다. 추상 클래스로 만든다고 해도 상속받는 클래스를 생성한 후 인스턴스화 하면 되기에 추상 클래스로 만든다고해서 인스턴스화를 막는다고 할 수는 없다. 상속을 불가능하게 하는 효과도 있음 (모든 생성자는 명시적이든 묵시적이든 상위 클래스의 생성자를 호출하는데 private 생성자라면 하위 클래스가 상위 클래스의 생성자에 접근할 수가 없음.) public class UtilityClass { // 기본 생성자가 만들어지는 것을 막는다(인스턴스화 방지용) private Utility..
-
아이템3. private 생성자나 열거 타입으로 싱글턴임을 보증하라책/이펙티브자바 2021. 6. 20. 13:54
싱글톤(singleton) ? 인스턴스를 오직 하나만 생성할 수 있는 클래스 ex) 함수와 같은 무상태(stateless) 객체, 설계상 유일해야 하는 시스템 컴포넌트 장점 한번의 객체 생성으로 재사용이 가능하다. → 메모리 낭비를 방지할 수 있다. → 전역성을 갖기 때문에 다른 객체와 공유가 용이히다. 단점 클래스가 싱글톤이면 이를 사용하는 클라이언트를 테스트하기가 어려워 질 수 있다. → 타입을 인터페이스로 정의한 다음 그 인터페이스를 구현해서 만든 싱글톤이 아니라면 싱글톤 인스턴스를 mock 구현으로 대체할수 없기 때문. 싱글턴을 만드는 방식 1. public static final 필드 방식 생성자는 private 으로 감추기 유일한 인스턴스에 접근할 수 있는 수단으로 public static 멤..
-
아이템2. 생성자에 매개변수가 많다면 빌더를 고려하라책/이펙티브자바 2021. 6. 20. 13:53
정적팩토리나 생성자에는 똑같은 제약이 있다. → 둘 다 선택적 매개변수가 많을때 적절히 대응이 어렵다는 점 이렇게 선택적 매개변수가 많을때는 어떻게 효율적으로 사용할 수 있을까 ? 점층적 생성자 패턴 자바빈즈 패턴 빌더 패턴 점층적 생성자 패턴 (telescoping constructor pattern) 필수 매개변수만 받는 생성자 → 필수 매개변수, 선택 매개변수1 ... 필수 매개변수, 선택 매개변수 n ... 이렇게 전부 다 받는 생성자까지 늘려가는 방식 → 쓸 수는 있지만, 매개변수 개수가 많아지면 클라이언트 코드 작성이나 읽기가 어렵다. → 각 값의 의미가 헷갈림. → 타입이 같은 매개변수가 연달아 있으면 찾기 어려움. → 결국 런타임에 엉뚱한 동작 발생. 자바빈즈 패턴 (JavaBeans pa..
-
아이템1. 생성자 대신 정적 팩토리 메소드를 고려하라책/이펙티브자바 2021. 6. 20. 13:51
일반적으로 클라이언트가 클래스의 인스턴스를 얻기 위한 수단은 public 생성자이다. 이 생성자와 별도로 팩토리 메소드를 통하여 인스턴스를 얻을 수 있다. 팩토리 메소드? 클래스의 인스턴스를 반환하는 단순한 정적 메서드 → 책에서 장점 5가지와 단점 2가지를 소개한다. 장점 1. 이름을 가질 수 있다. 생성자 사용시에는 매개변수와 생성자 자체만으로는 반환되는 객체를 설명하기 힘들다. 반면에 정적 팩토리메소드는 이름을 통하여 객체에 대한 설명이 가능하다. public class Bottle { private String brand; private String name; private int price; public Bottle(String brand) { this.brand = brand; } static..
-
어떻게 읽을지 ...책/이펙티브자바 2021. 6. 20. 13:50
읽어봤는데 조금 어렵다. 그래도 일단 읽긴 읽어볼건데 한 번 읽는거로는 이해가 안된다. 다 이해는 못할 거 같은데 50%라도 가져가면 만족하는걸루 .. 찾다보니 책 스터디가 있어서 다른 사람들이 정리한 글도 같이본다. -> 정리가 잘 되어있어서 보기 좋음 https://github.com/Java-Bom/ReadingRecord https://github.com/Meet-Coder-Study/book-effective-java 나도 읽으면서 간단하게 정리해야겠다.
-
네트워크CS 2021. 5. 31. 16:18
네트워크 1. OSI 7 Layer 정의 네트워크 프로토콜과 통신을 7 계층으로 표현 목적 프로토콜을 기능별로 나누고 계층 별로 구분 벤더간 호환성을 위한 표준 필요 -> 쉬운 접근성으로 기술의 발전 1 계층 - Physical 장치와 통신 매체 사이의 비정형 데이터의 전송을 담당 디지털 bit 를 전기, 무선 또는 광 신호로 변환 전송되는 방법, 제어 신호, 기계적 속성 등을 정의 ex) 케이블, 인터페이스, 허브, 리피터 2 계층 - Data Link 동일 네트워크 내에서 데이터 전송, 링크를 통해서 연결을 설정하고 관리 물리계층에서 발생할 수 있는 오류를 감지하고 수정 ex) 모뎀, 스위치 3 계층 - Network 다른 네트워크로 데이터 전송, IP 주소로 통신 출발지 IP 에서 목적지 IP 로 ..