Study

Study/이펙티브 자바

[Effective Java 3E] 인스턴스화를 막으려거든 private 생성자를 사용하라

💥 개요 정적 메서드와 정적 필드만을 담은 클래스는 객체지향적이라고 볼 수 없습니다. 하지만 분명 쓰임새가 있는데, 기본 타입 값(java.util.Arrays)이나 java.util.Collections처럼 특정 인터페이스를 구현하는 객체를 생성해주는 정적 메서드를 모아 놓을 수 있습니다. 자바 8부터는 이런 메서드를 인터페이스에 넣을 수 있게 되었습니다. 또한 final 클래스와 관련된 메서드들을 모아놓을 때도 사용합니다. final 클래스를 상속해 하위 클래스에 메서드를 넣는건 불가능하기 때문입니다. 🩻 문제 정적 멤버만 담은 유틸 클래스는 instance로 만들어 쓰려한게 아닙니다. 하지만 문제는 생성자를 명시하지 않으면 컴파일러는 기본 생성자를 자동으로 만듭니다. 그리고 추상클래스로 만드는 방법..

Study/이펙티브 자바

[Effective Java 3E] private 생성자나 열거 타입으로 싱글턴임을 보증하라

💥 개요 싱글턴이란 인스턴스를 오직 하나만 생성할 수 있는 클래스를 말합니다. 싱글턴의 전형적인 예시로 함수와 같은 무상태성(stateless) 객체나 설계상 유일해야 하는 시스템 컴포넌트를 들 수 있습니다. 그런데 클래스를 싱글턴으로 만들면 사용하는 클라이언트를 테스트하기가 어려워 질 수 있습니다. 타입을 인터페이스로 정의한 다음 그 인터페이스를 구현해서 만든 싱글턴이 아니라면 싱글턴 인스턴스를 mocking 할 수 없기 때문입니다. 💡싱글턴을 만드는 방식 우선 생성자를 private으로 감춰두고, 유일한 인스턴스에 접근할 수 있는 수단으로 public static 멤버를 하나 마련해둡니다. 1. public static 멤버가 final 필드인 방식 private 생성자는 public static 필..

Study/이펙티브 자바

[Effective Java 3E] 생성자에 매개변수가 많다면 빌더를 고려하라

💥 개요 정적 팩터리와 생성자에는 똑같은 제약이 하나 있습니다. 매개변수가 많은 경우 문제가 발생하는데, 만약 20개, 30개의 멤버 변수를 가지는 경우가 문제가 발생합니다. 물론 멤버변수가 모두 필수값이라면 클래스로 묶어 처리하는 방법도 있겠지만, 대부분의 경우 대다수의 값이 기본값(0, 혹은 DB에서 정의된 Default Value)이 포함되는 경우가 많이 발생하게 됩니다. 또한 선택적 매개변수를 받아야 하는 경우, 기존에는 원하는 매개변수의 개수에 따라 생성자나 정적 팩터리를 늘려야하는 경우가 발생합니다. 이 클래스의 인스턴스를 만들려면 원하는 매개변수를 모두 포함한 생성자 중 가장 짧은것을 골라 호출하면 됩니다. 하지만 이런 점층적 생성자 패턴은 위에 말한 것처럼 매개 변수의 개수가 늘어날수록 코..

Study/이펙티브 자바

[Effective Java 3E] 생성자 대신 정적 팩터리 메서드를 고려하라

💥 개요 보통 개발시 public 생성자를 자주 사용하는데, 이펙티브 자바에서 조슈아 형님이 정적 팩터리 메서드를 사용하면 아주 행복한 상황들이 일어난다고 합니다. 아래에서 계속 얘기해 볼 텐데 정적 팩터리 메서드는 그 클래스의 인스턴스를 반환하는 생성자와 동일한 역할을 하는 단순 static method를 제공하는 것을 정적 팩터리 메서드라고 합니다. ❤️ 장점 1. 이름을 가질 수 있다. 위와 같은 단순한 생성자를 생각해보면, 생성자를 넘기는 매개변수와 생성자 자체만으로 반환되는 객체의 특성을 정확하게 설명하지 못합니다. 하지만 정적 팩터리는 이름만 잘 지어주게 된다면 특성을 제대로 설명이 가능합니다. 클이언트는 컴퓨터를 얻고 싶다면 compuer를 얻는 정적 팩터리 메서드를 호출하면 되고, 책을 얻..

Study

캐시 버스팅(Cache busting)이란?

캐시 버스팅이란 웹 개발에서 캐시(Cache)를 우회하여 새로운 콘텐츠를 불러오는 기술입니다. 그렇다면, 캐시 버스팅은 왜 사용하는걸까요? 웹 페이지나 어플리케이션은 자주 업데이트 되지 않는 정적 파일(이미지, 스타일시트, 자바스크립트 등)을 캐시에 저장합니다. 이를 이용해 사용자의 브라우저에서 캐시를 저장하여 더 빨리 로드되도록 합니다. 하지만 새로운 버전의 파일이 업데이트 되는 경우에 그 파일을 가져와야 하는데 지난 버전의 파일이 캐시를 통해 가져옵니다. 이런 경우에 브라우저에게 캐시된 파일이 최신 파일이 아니라는 것을 알리는 기술을 말합니다. 즉, 캐시된 파일을 우회하고 새로운 파일을 불러오기 위해 캐시 버스팅 기술을 사용합니다. 캐시 버스팅의 대표적인 방법은 3가지가 있습니다. 파일 경로를 통해 ..

Study

[Jenkins] 젠킨스 설치 중 에러와 해결방법

회사에서 젠킨스를 맡아 구성을 하는 중에 일어난 여러 가지 문제점들과 해결방법을 말해보겠습니다. 1. 파이프라인별 nuget package 설정 폐쇄망 환경에서 여러 프로젝트에 각각 다른 nuget package를 사용하는데 로컬 패키지를 구성하고 해당 프로젝트에 맞는 로컬 패키지 저장소를 설정하는 방법입니다. 패키지 별 저장소를 만들어두고 프로젝트별로 nuget.config를 생성하여 configuration을 설정해줍니다. 자세한 config 정보들은 doc를 통해서 확인할 수 있습니다. 2. Window (윈도우) 젠킨스 Workspace 저장 위치 세팅을 건드리지 않았다면 기본적으로 C:\ProgramData\Jenkins\. jenkins\workspace에 젠킨스가 저장됩니다. (숨겨진 폴더기..

Study

[Jenkins] 젠킨스 플러그인 오프라인 설치 (윈도우 plugins 폴더 위치)

폐쇄망의 경우 젠킨스를 설치해도 플러그인의 다운로드가 어렵습니다. https://plugins.jenkins.io/ 위 사이트를 통해서 폐쇄망이 아닌 PC에서 원하는 플러그인을 검색해서 hpi를 다운로드 받고, plugin 폴더로 이동시키는 방법이 있는데, 여러개의 hpi를 다운로드 시킨다면 번거롭고, 필요한 다른 플러그인을 일일이 실행시키는 일은 매우 귀찮습니다. 해결방법(Windows) 폐쇄망이 아닌 PC에 젠킨스 설치 후 필요한 플러그인 다운로드 C:\ProgramData\Jenkins\.jenkins 아래에 plugins 폴더를 복사 폐쇄망 PC의 C:\ProgramData\Jenkins\.jenkins에 있는 plugins 폴더 삭제 후 복사한 plugins 붙여넣기

Study/네트워크

[모든 개발자를 위한 HTTP 웹 지식] HTTP 기본

HTTP란? HyperText Transfer Protocol의 약자로 말 그대로 HyperText를 전송하기 위한 프로토콜 전송 가능한 데이터 HTML, TEXT IMAGE, 음성, 영상, 파일 JSON, XML (API) 위와 같이 거의 모든 형태의 데이터 전송이 가능합니다. 서버간의 데이터를 주고받을 때 대부분 HTTP를 사용합니다. HTTP의 특징 클라이언트 서버 구조 무상태 프로토콜(스테이스리스), 비연결성 HTTP 메시지 단순함, 확장 가능 클라이언트 서버 구조(Request Response 구조) 1. 클라이언트는 서버에 요청을 보내고, 응답을 대기합니다. 2. 서버는 요청에 대한 결과를 만들어서 응답을 클라이언트에 전송합니다. 무상태 프로토콜(Stateless) 서버가 클라이언트의 상태를 ..

mntdev
'Study' 카테고리의 글 목록 (7 Page)