본문 바로가기
728x90

공부158

[이펙티브자바]item6.불필요한 객체 생성을 피하라 재사용이 많다면 캐싱를 고려해보자. 꼭 필요한 상황이 아니라면 박싱된 기본 타입보다는 기본 타입을 사용하고, 의도하지 않은 오토박싱이 일어나지 않게 한다. 2023. 1. 13.
[이펙티브자바]item5.자원을 직접 명시하지 말고 의존 객체 주입을 사용하라. 하나의 클래스에서 여러 리소스를 사용하려면 아래와 같은 코드는 KoreanDicationary 만 사용할 수 있게 코드가 박혀있으니, public class SpellChecker { private Lexicon dictionary; public SpellChecker(Lexicon dictionary) { this.dictionary = dictionary; } private SpellChecker(){} public boolean isValid(String word) { return true; } public List suggestions(String typo) { throw new UnsupportedOperationException(); } public static void main(String[.. 2023. 1. 13.
[이펙티브 자바]item4.인스턴스를 막으려거든 private 생성자를 사용하라. 정적 메서드와 정적 필드만을 담은 클래스를 만들고 싶을 때가 있다는데..util 클래스 같은걸 말하는걸까..그런걸 제외하고 만들어본 기억이 없네. 추상 클래스로 만들면 인스턴스화를 막을 수 없으니 private 생성자로 막아두자. public class TestClass { private TestClass() { throw new AssertionError(); } // ... } AssertionError -> http://cris.joongbu.ac.kr/course/java/api/java/lang/AssertionError.html AssertionError (Java 2 Platform SE 5.0) 지정된 객체로부터 파생한 상세 메세지를 지정해 AssertionError를 구축합니다. 상세 메.. 2023. 1. 13.
[이펙티브 자바]item3.private 생성자나 열거 타입으로 싱글턴임을 보장하라 싱글톤은 만드는 방식은 많다.DCL 방식의 싱글톤 또는 enum 싱글톤을 이용하자. 물론 싱글톤의 단점도 존재한다. 테스트보기가 힘들다. mock 객체를 사용하려면 해당 객체가 인터페이스를 구현하고 있어야 함. 자바 싱글톤과 스프링의 싱글톤은 다르다. 자바는 클래스로더에 의해서 만들어지고, 스프링은 스프링 컨테이너 (applicationContext)에 의해서 구현된다 역직렬화 할때 직렬화 == 역직렬화 비교를하면 false 일텐데, 이를 true 로 나오게끔 하고싶으면 override 는 아니지만,,그렇다고 override 가 아니라고 말하기도 뭐한 코드를 넣어야한다 아래코드는 @override 가 아님.하지만 역직렬화 할때 사용은 함. private Object readResolve() { retur.. 2023. 1. 11.
[이펙티브 자바]item2.생성자에 매개변수가 많다면 빌더를 고려하라 자바를 쓰면 롬복은 필수로 쓰는데, 롬복으로 @Builder 로 쓰면서 알고 있던 것을 다시한번 확인하는 경험. 순수 빌더 패턴 클래스 안 정적 내부 클래스 선언)ex Builder 내부 생성자와 build 메서드 호출시 return new **class 에 this 를 넘겨 return 함. 아무래도 생성자가 많다면, 아무래도 자바는 빌더패턴을 사용해서 반환하는게 더 낫지않나 생각함. Objects.requireNonNull() 를 잘 사용안하는데, 나중에 써봐야지. 오버라이드 목록을 보니, 익셉션 메세지를 넣을 수 있는 부분이 있네. 비슷한 Optional.of 도 참고해서 입맛에 맞게 사용하자~ https://emgc.tistory.com/124 단점1.@Builder 적용시 모든 파라미터를 받는 .. 2023. 1. 11.
[이펙티브 자바]item1.생성자 대신 정적 팩터리 메서드를 고려하라. 장점 이름을 가질 수 있다. 생성자로 호출하는게 아니라, 메서드 호출이라 좀 더 명확한 네이밍이 가능함. 호출될 때마다 인스턴스를 새로 생성하지 않아도 된다. 싱글톤 처럼 만들어서 반환하면 생성비용을 좀더 아낀다. ex)Integer.valueof 반환 타입의 하위 타입 객체를 반화할 수 있는 능력이 있다. 디자인패턴처럼 인터페이스를 상속받아 반환.생성자를 사용한다면 해당 클래스만 반환할 수 있지.. 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있다. 오잉 이거 팩토리패턴 아닌가.파라미터로 받은 값으로 분기처리 후 return 정적 팩터리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 된다. https://www.youtube.com/watch?v=8uryCPDcoqI&.. 2023. 1. 11.
세계 최고의 인재들은 어떤 루틴으로 일할까? # 세계 최고의 인재들은 어떤 루틴으로 일할까? * 회의에 참석할 때는 자신의 입장을 분명히 밝힌다. * 참석자는 각자의 의견이 옳든 그르든 일단 자신의 의견을 뚜렷하게 밝혀야 한다. * 발언할 떄, 근거는 필수 * 결론부터 말한다. 결론과 함께 반드시 근거를 말해야 한다. ('Because') 논리적으로 사고하려면 결론과 근거의 관계를 명확하게 밝혀야 한다는 것. -> 결론과 근거를 화살펴로 연결했을 때 부자연스럽지 않은지 확인해 보자 * 상대와 의견이 다를 때는 근거에 주목한다. * 반론을 펼칠 때는 상대를 배려하기 위해 영어의 '완충표현' 을 꼭 사용한다 * ex)정말 흥미로운 관점이네요. 그런데 저도 한 가지 아이디어가 있는데요. * ex)음, 잠시 생각좀 해볼께요. 전 완전히 동의하기는 좀 어렵.. 2021. 12. 2.
백준 2562 자바 - 궁금증 for, for향상문.. int intArray[] = {3, 29, 38, 12, 57, 74, 40, 85, 61}; int maxV = 0; int maxIndex = 0; int index = 0; for(int v : intArray){ if(maxV < v){ maxV = v; maxIndex = index; } index++; } System.out.println(maxV); System.out.println(maxIndex); index를 쓸려니 거시기해서..찾아봤다 foreach loop를 굳이 써야하는지~ 결론 : ArrayList, Array는 for문을 사용하고(별차이는없다 사실).. LinkedList 는 forEach loof를 사용하자..차이가 크다. foreach는 내부적으로 iterator를 사용하.. 2021. 10. 19.
개발자 면접 질문 대답 준비(자바 및 객체지향 등) 앞선 글에 따라 자바 편을 준비해봤다.. 못 보셨으면 -> 개발자 면접 질문 대답 준비(시작에 앞서) 계속 업데이트될 예정이다..(생각나면.. 한 번에 많은 질문을 올리기는 너무 힘들다..) 자바만 다루기에는 객체지향이 섭섭해서 같이 공부하기를 추천!! 꼬리를 무는 질문이 생길 수 있습니다. 대답을 너무 길게 하면 어려워질 수 있고 부족한 내용은 찾으면서 공부하길 추천한다! ㅎㅎ --- 자바란 무엇인가? 위키백과에 정의된 자바란? 1955년 '썬 마이크로시스템즈'(제임스고슬링 외 연구원들)에서 개발한 객체지향 언어입니다. 특징으로는 멀티쓰레드를지원하며, 동적 로딩 지원, 운영체제에 독립적이며, 자동 메모리 관리(gc) 등이 있습니다. (특징을 살펴보고 싶으면 해당 글로 이동하자 자바 언어의 특징을 간략히.. 2021. 8. 25.
728x90