분류 전체보기(77)
-
[아이템4] 인스턴스화를 막으려거든 private 생성자를 사용하라
public class Utility{ //기본 생성자를 막기 위해 private 사용 private Utility(){ //기본생성자를 통한 객체 생성 방지를 위해 throw 발생 throw new Exception(); } } 명시적으로 만든 생성자가 private이기 때문에 클래스의 외부에서는 접근 불가능하다. 따라서 어떤 환경에서도 클래스가 인스턴스화 되는것을 막을 수 있다. throw new Exception처럼 예외를 발생시켜 직관적으로 명시해준다.
2023.04.27 -
[아이템3] private 생성자나 열거 타입으로 싱글턴임을 보증하라
싱글턴: 인스턴스를 오직 하나만 생성할 수 있는 클래스 주의점: 클래스를 싱글턴으로 만들게 되면 사용하는 클라이언트를 테스트하기가 어려워진다. ->MOCK객체를 만들 수 없기 때문에 1. public static final 방식의 싱글턴 public static final Elvis INSTANCE = new Elvis(); private Elvis(){...} 위 코드처럼 INSTANCE를 호출하게 되면 Elvis는 최초 한 번만 만들어진 이후에 쭉 재사용된다. 장점: public static final 클래스이므로 맨 처음에 메모리가 올라오고 나서 변경이 불가능하니 명백히 싱글턴임이 드러난다. Elvis el = new Elvis(); //불가능 Elvis el1 = Elvis.INSTANCE..
2023.04.27 -
[아이템2] 생성자에 매개변수가 많다면 빌더를 고려하라
생성자와 정적팩터리의 공통적 제약: 선택적 매개변수가 많을 때 적절히 대응하기 어렵다. 매개변수가 많으면 코드를 읽을 때 각 값의 의미가 무엇인지 헷갈릴테고, 매변수가 몇개인지도 주의해서 세어보아야한다. 찾기 어려운 버그로 이어질 수도 있다. 대안1. 점층적 생성자 패턴 매개변수 개수만큼 생성자를 늘리는 방식 NutritionFacts cocaCola = new NutritionFacts(240, 8, 100, 0, 35, 27); 사용자가 설정하길 원치않는 매개변수까지 어쩔 수 없이 값을 지정해야한다. 매개변수 조합에 따라 생성자 수가 쓸데없이 많이 늘어날 수 있다. 불변 클래스가 아니기 때문에 오류가 생길 가능성이 크고, 안전성이 낮다. 대안2. 자바빈즈 패턴 매개변수가 없는 생성자로 객체를 ..
2023.04.27 -
[아이템1] 생성자 대신 정적 팩터리 메서드를 고려하라
생성자와 정적 팩터리 메소드의 공통적인 역할: 객체를 생성한다. 1. 이름을 가질 수 있다. 객체는 생성 목적에 따라 사용할 필요가 있다. 생성자는 내부 구조를 잘 알고 있어야 목적에 맞게 객체를 생성할 수 있다. 하지만 정적팩터리 메서드를 사용하면 메서드 이름에 객체의 생성 목적을 담아낼 수 있다. -> 가독성이 좋아진다. //생성자 public BigInteger(int bitLength, int certainty, Random rnd){} //정적 팩터리 메소드 public static BigInteger probablePrime(int bitLength, Random rnd){} 정적 팩터리 메소드는 값이 소수인 BigInteger를 반환하는 메소드라고 알 수 있음. 2. 호출할 때마다 새..
2023.04.27 -
Vue에서 이벤트 전파(버블링) 막기
작업을 하다보니 태그에 클릭 이벤트를 걸었는데, 태그 안에 있는태그에도 클릭 이벤트가 필요했다. 근데 그렇게 하니까 하위태그(태그)의 클릭 이벤트가 먹히지 않았다. 알아보니 이를 버블링 현상이라고 하는데, 상위태그의 이벤트가 하위태그의 이벤트까지 전파된 현상이다. 이를 해결하기 위해서는 하위태그에 @click.stop=“” 이벤트를 걸어주어야한다. 이렇게 해주면 상위태그, 하위태그의 이벤트 둘 다 동작할 수 있게된다. cf) @click.prevent=“”는 해당 태그의 이벤트 자체를 막음.
2023.04.27 -
MAC에서 사용중인 포트 찾아서 KILL하는 방법
윈도우에서 사용중인 포트를 죽일 때 썼던 'taskkill -f /pid 포트번호' 가 맥에서는 당연히 먹히지 않았다. 윈도우랑 명령어도 다르고 여러모로 적응하기 힘들었는데 하나씩 기록해보려고 한다. 먼저 죽이고자 하는 포트의 피드(PID)번호를 알아야한다. lsof -i:포트번호 이렇게하면 해당 포트의 피드번호가 나온다. 피드번호는 숫자로 이루어져있다. 피드번호를 알았으면 그 피드번호로 포트를 kill해주어야한다. kill -9 피드번호 이렇게 해당 포트를 kill할수 있다.
2023.04.27