Language/[Java] (91) 썸네일형 리스트형 [Effective Java] 3. 싱글톤 패턴 싱글턴이란 객체를 하나만 생성하는 것이다. 인터페이스를 구현한 싱글턴 객체가 아니라면 , mock을 사용하여 테스트 하기 어렵다. 내부 인스턴스를 static final로 두고, private 생성자로서 사용한다면, 내부 static 인스턴스가 초기화 될떄 딱 한번만 privatee 생성자가 돌고, 이 인자는 하나뿐임을 보장한다. 유일하게 인스턴스 get 부분만 public 인경우, instance를 하나만 가지고 있고 이를 return 하는 것을 보장할 수있다. (final) 장점 향후 확장성이 있다. 다른 인스턴스(새로운 인스턴스)가 필요하다면 언제든지 신규 메소드를 추가해서 사용할 수 있다 리플렉션 방어가 된다. setAccessible 를 사용해 private 생성자에 접근 할 수 있는데 이떄 i.. [Effective Java] 2.점층적 생성자 패턴 -> 빌더 패턴 자바 빈즈 패턴 - 생성자를 파라미터 없이 생성하고, setter를 사용해서 관리 하나의 객체를 생성하고 여러개의 메서드를 사용해야한다. 점층적 생성자 - 속성이 늘어날떄마다 생성자 인수를 하나씩 늘려서 사용 인자가 늘어날떄마다 추가 해줘야하는 값이 계속 늘어난다. 빌더 패턴 -빌더 패턴은 넘기는 매게 변수에 따라 자동으로 다른 객체를 생성할 수도 있고 메서드 체이닝으로 어떤 변수에 어떤값을 넣을지를 명시적으로 선언하여 확실하게 객체를 생성할 수있다. 빌더 생성비용때문에, 인자가 4개 이상부터 값어치를 하고, 인자가 많은 객체나 대부분의 인자가 선택적일때 사용하면 유용하다 [Effective Java] 1.생성자 대신 정적 팩토리 메소드를 사용 장점 1. 이름을 가질 수 있다. 2. 같은 파라미터를 가지는 생성자를 여러개 만들수 있다. 3.호출 할떄마다 인스턴스를 새로 생성하지 않아도된다. (미리 만들어놓은 객체를 반환할 수 있다.) 4. 리턴타입의 하위 타입 객체를 반환할 수 있다. 5.입력 매게 변수에 따라 매번 다른 타입의 클래스를 반환할 수 있다. 단점 -상속이 불가 -일반 메서드와 차이가 없기 때문에 찾는데 어려움이 있다 (명명 규칙 of,From, valueof 를 관례상 사용하긴 함) [Java] 리플렉션, 인터페이스 리플렉션 class객체를 가져온다.생성자를 가져온다.메소드를 가져온다필드를 가져온다. 장점 -프로그램에서 임의의 클래스에 접근 할 수 있다. 생성자,메서드,필드를 조작할 수 있다. 컴파일 당시 존재하지 않던 클래스도 이용할 수 있다. 단점 컴파일 타임 타입 검사를 이용할 수 없다 코드가 지저분 해지고 장황해준다. 성능이 떨어진다. 일반 메서드 호출보다, 리플렉션을 이용한 메서드 호출이 훨씬 느리다. 즉, 속도가 느리고 컴파일 때 잡을수없고, 지저분 해져서 잘 안쓴다 인터페이스는 다중구현이 가능하고, 개발시간 단축(여러명이서할때, 인터페이스를 주고 해당 각자 별도로 구현가능) 인터페이스는 구현을 강제화 하기 때문에, 구현체들의 통일성을 맞출수도있다. 클래스간 결합도를 낮춘다. 단순히 인터페이스만 갈아끼우면 끝 equals와 hashcode차이 String은 new를 사용해서 새롭게 인스턴스를 만들고, 메모리에 올리기 때문에 다른 주소값을 참조하기에 == 연관시에 false가 리턴된다. 예를 들어서 String a. = "3" String b = "4" String c = new String("7") 이면 a == b 이지만 a !=c 이다. String 은 wrapper class이지만, 같은 내용에 대해서는 같은 주소를 바라보게 끔 한다 String constant pool에 등록되기 때문이고 다른 주소값을 보는 c와는 같지 않다는 것을 알 수 있다. hashcode는 해당 주소값을 hashFunction한 값을 출력한다. object에 있는 equals는 해시코드에 대한 비교를 하고 결과를 return한다. 만약에 사용자가 임의로 만든 o.. [Java] Hash 동작방식 해시, 쉽게말하면 많은 것들이 있지만 Hash 기반으로 동작하는 hashMap에 대해서 동작방식을 정리한다. Object클래스 기준, hashCode메서드에 대한 설명이다. 해당 메서드는 오브젝트의 해시코드 값을 리턴하고, 두 오브젝트가 equals를 통해 같다고 판별되면 hashcode또한 동일해야한다. equals메서드를 통해 다르다고 판별되더라도, hashcode가 꼭 달라야하는 것은 아니지만 hashCode가 다르면, 해시 테이블을 사용할때 성능상 이점이 나온다. HashMap은 기본적으로 bucket배열을 16으로 설정한다. bucket이란, HashTable에 데이터를 담는 공간을 의미한다. 이 용량은 설정해 놓은 LOAD_FACTOR기준에 다다르면 자동으로 2배씩 증가한다. 용량을 작게 설정.. [Java] Shallow Copy Deep Copy 깊은 복사란 -데이터 자체를 통째로 복사한다. -복사된 두 객체는 완전히 독립적인 메모리를 차지한다. -value type의 객체들은 깊은 복사를 하게 된다. 얕은 복사란 최소한의 복사만 한다. 인스턴스가 메모리에 새로 생성되지 않는다. 값자체를 복사하는 것이 아니라 주소값을 복사하여 같은 메모리를 가리킨다. 얕은 복사 (주소값을 공유) 깊은 복사 (값을 공유하여, 신규 객체 생성) -cloneable인터페이스 구현, 복사 생성자, 복사 팩터리 등등 인스턴스를 new로 신규로 만들어서, 새로운 인스턴스를 탄생, 값을 복사하여 신규 인스턴스를 생성한다. [Java] 쿠키와 세션 공통점 : 웹 통신 간 유지하려는 정보를 저장하기 위해 사용하는 것 Http프로토콜의 특징이자 약점을 보완하기 위해 사용된다. 1. Connectionless 프로토콜 (비 연결지향) 클라이언트가 서버에 요청을 했을때, 그 요청에 맞는 응답을 보낸후 연결을 끊는 처리 방식이다. 그 요청에 맞는 응답을 보낸 후 연결을 끊는 처리 방식이다. -Http 1.1 버전에서 연결을 유지하고, 재활용 하는 기능이 Default로 추가되었다. (keep-alive 값으로 변경가능) 2.Stateless 프로토콜 (상태정보 유지안함) 클라이언트의 상태 정보를 가지지 않는 서버 처리 방식이다. 클라이언트와 첫번째 통신에서 데이터를 주고받아도, 두번째 통신에서 이전 데이터를 유지하지 않는다. 3. 실제로 데이터 유지가 필요.. 이전 1 2 3 4 5 6 ··· 12 다음