정적 메서드와 정적 필드만을 담은 클래스는 객체 지향적으로 사고하지 않는 이들이 종종 남용하는 방식이지만 분명 나름의 쓰임새가 있다.예를 들어 java.lang.Math와 java.util.Arrays 처럼 기본 타입 값이나 배열 관련 메서드들을 모아놓을 수 있다. 또한, java.util.Collections처럼 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드(또는 팩토리)를 모아놓을 수도 있다. 그런데 이런 정적 멤버만 담은 클래스는 인스턴스로 만들어 쓰려고 설계한게 아니다. 아래 예시를 보자. static메서드만 가지고 있는 어떤 클래스가 있다고 가정해보자.public class UtilityClass { public UtilityClass(){} public static Cha..
분류 전체보기
애플리케이션을 만들다보면 어떤 인스턴스가 애플리케이션에 하나만 존재해야 하는데 이럴때 사용하는것이 싱글턴이며, 싱글턴이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말한다.그런데 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트하기가 어려워 질 수 있다.왜냐하면 타입을 인터페이스로 정의한 다음 그 인터페이스를 구현해서 만든 싱글턴이 아니라면 싱글턴 인스턴스를 가짜(mock) 구현으로 대체할 수 없기 때문이다. 위 정보를 토대로 싱글턴을 만드는 일반적인 방식과 문제점을 살펴보자.1. private 생성자 + public static 멤버 변수class Elvis{ public static final Elvis INSTANCE = new Elvis(); private Elvis()..
생성자와 정적 팩토리 메서드는 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 단점이 있다.https://lsh2016.tistory.com/101 빌더 패턴(Builder Pattern) 을 사용하는 이유먼저 , 학생이라는 객체를 생성하는 코드가 있고 , 아래와 같은 생성자 정의해두었다고 가정한다. public Student(long id,String name,String major,int age,String address){ this.id=id; this.name=name; this.major=major; this.aglsh2016.tistory.com과거에 여러 블로그를 참조해서 위와 같은 내용으로 빌더 패턴을 정리한적이 있는데 이제와서 알고보니 현재 보고있는 이펙티브 자바에 있는 내용이였다. ..
정적 팩토리 메서드는 생성자 대신 다양한 장점을 제공할 수 있다.💡여기서 말하는 정적 팩토리 메서드는 디자인 패턴에 나오는 팩토리 메서드와 다른것이다.디자인 패턴에서 정적 팩토리 메서드와 관련된 패턴은 없다.장점장점 1. 이름을 가질 수 있다.public class Person{ private String name; private Person(String name){ // 생성자를 private으로 제한 this.name = name; } public static Person from(String name){ // from이라는 이름을 가짐 return new Person(name); }}위처럼 생성자는 private으로 두면 클라이언트가 정적 팩토리 메서드를 사용하도록 유도할 수 있다.위 ..
이 글은 김영한님의 스프링 부트편 강의중 제목과 관련된 부분을 블로그장의 취향대로 요약한 것이며 강의 자료 및 출처는 가장 아래에서 확인할 수 있습니다.1. 외부설정을 왜하는가?스프링부트에서 외부설정을 지원하게된 배경을 아래에서 살펴보자.1-1. 개발과 운영환경 각각 빌드같은 코드를 두고 개발 환경과 운영 환경에 빌드를 해야한다면 위와같이 두 번 빌드를해야하는 상황이 올것이다.두 번 빌드를 한다는것은 문제가 될 수 있다.만약 추후에 운영 환경에 문제가 생겼을때 개발 환경과 같은 소스코드에서 나온 결과물인지 검증하기가 어렵다. 그래서 보통 아래와 같이 빌드는 한번만 하고 각 환경에 맞추어 실행 시점에 외부 설정값을 주입한다. * 유지보수하기 좋은 애플리케이션 개발의 기본 원칙은 변하는 것과 변하지 않는 것..
ECS란(Elastic Container Service)?ECS는 *클러스터에서 컨테이너를 쉽게 실행, 중지 및 관리할 수 있게 해주는 컨테이너 관리 서비스이다. *클러스터 : 여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합이다. 쉽게 말해 여러 대의 컴퓨터 집합으로 컨테이너의 생명주기를 관리해준다.시..
컴퓨터가 초당 연산할 수 있는 최대 횟수는 1억 번이다. 따라서 코딩 테스트의 경우 연산 횟수는 1,000~3,000만 정도로 고려해서 시간 복잡도를 생각하면 된다. 예를 들어 제한 시간이 1초인 문제는 연산 횟수가 3,000만이 넘는 알고리즘은 사용하면 안된다. 제한 시간이 1초인 문제에 각 시간 복잡도별로 허용할 수 있는 N의 가용 범위는 아래와 같다. 시간 복잡도 N의 가용 범위 O(N!) 10 O(2ⁿ) 20~25 O(N³) 200~300 O(N²) 3,000 ~ 5,000 O(NlogN) 100만 O(N) 1,000~2,000만 O(logN) 10억 시간 복잡도 초과 예제) 제약 조건 정수 배열의 길이는 2이상 10⁵입니다. 정수 배열의 각 데이터 값은 -100,000 이상 100,000 이하입..
이 글은 김영한님의 스프링 고급편 강의중 제목과 관련된 부분을 블로그장의 취향대로 요약한 것이며 강의 자료 및 출처는 가장 아래에서 확인할 수 있습니다. 1.리플렉션(reflection) 적용 단순하게 클래스 A,B가 있을때 프록시를 적용하고 싶다면 프록시 A클래스와 프록시 B클래스를 만들어서 적용하면 될 것이다. 그런데 이는 굉장히 불편하다. 프록시 객체를 동적으로 변경할 필요가 있다. 따라서 자바에서 지원하는 리플렉션(reflection)기술을 사용하여 공통으로 프록시 객체를 생성하도록 한다. 리플렉션은 클래스나 메서드의 메타정보를 사용해서 동적으로 호출하는 메서드를 변경할 수 있다. @Test void reflection() throws Exception{ Class classHello = Clas..