본문 바로가기

Language

(93)
[Java] Shallow Copy Deep Copy 깊은 복사란 -데이터 자체를 통째로 복사한다. -복사된 두 객체는 완전히 독립적인 메모리를 차지한다. -value type의 객체들은 깊은 복사를 하게 된다. 얕은 복사란 최소한의 복사만 한다. 인스턴스가 메모리에 새로 생성되지 않는다. 값자체를 복사하는 것이 아니라 주소값을 복사하여 같은 메모리를 가리킨다. 얕은 복사 (주소값을 공유) 깊은 복사 (값을 공유하여, 신규 객체 생성) -cloneable인터페이스 구현, 복사 생성자, 복사 팩터리 등등 인스턴스를 new로 신규로 만들어서, 새로운 인스턴스를 탄생, 값을 복사하여 신규 인스턴스를 생성한다.
[Java] 쿠키와 세션 공통점 : 웹 통신 간 유지하려는 정보를 저장하기 위해 사용하는 것 Http프로토콜의 특징이자 약점을 보완하기 위해 사용된다. 1. Connectionless 프로토콜 (비 연결지향) 클라이언트가 서버에 요청을 했을때, 그 요청에 맞는 응답을 보낸후 연결을 끊는 처리 방식이다. 그 요청에 맞는 응답을 보낸 후 연결을 끊는 처리 방식이다. -Http 1.1 버전에서 연결을 유지하고, 재활용 하는 기능이 Default로 추가되었다. (keep-alive 값으로 변경가능) 2.Stateless 프로토콜 (상태정보 유지안함) 클라이언트의 상태 정보를 가지지 않는 서버 처리 방식이다. 클라이언트와 첫번째 통신에서 데이터를 주고받아도, 두번째 통신에서 이전 데이터를 유지하지 않는다. 3. 실제로 데이터 유지가 필요..
[Java] Lombok 주의사항 롬복은 어노테이션으로 편하게 getter,setter,생성자 등등을 사용할 수 있는 것이다. 근데, 사용시에 주의해야하는 사항이 있다. AllArgsConstructor, RequiredArgsConstructor 사용금지 생성자 필드에 대한 자동 생성 어노테이션이다. 해당 필드에 대한 값의 순서만 바꾸면 ,생성자에대한 값도 바뀌게 되는데, 이는 오류 발생이 높다. 아무 생각없이 순서만 바꿔도 로직에서 동작을 안하거나,잘못된 값들이 저장 되는 위험이 있다. AllArgs -> 모든 필드를 생성자의 인수로 만들어주는 어노테이션 Required -> 초기화 되지않은 final, @nonnull이 붙은 필드에 대해 생성자를 생성해준다. @EqualsAndHashCode 사용자제 EqualsAndhashCode..
[Java] Static Factory method 팩터리 메서드 : 객체의 클래스 생성을 담당하는 메서드 생성자를 통해서 객체를 생성하지 않고, 생성 메서드를 통해서 객체를 생성하는 것을 정적 팩터리 메서드라고 한다. 그러면 생성자를 대신해서 정적 팩터리 메서드를 사용하면 뭐가좋을까 1. 이름을 가질 수 있다. 2.객체 생성을 캡슐화 가능하다 3. 하위클래스 타입으로 반환이 가능하다. 4.호출할때마다 신규 객체를 생성할 필요가 없다(싱글톤 유지시에)
[java] war파일 jar파일 비교 jar : Java archive Java 어플리케이션이 동작할 수 있도록 자바 프로젝트를 압축한 파일 Class, 라이브러리 파일을 포함함 JRE Java Runtime Environment만 있어도 실행 가능함 War servlet/ Jsp 컨테이너에 배치할 수있는 웹 애플리케이션 압축파일 포맷 웹 관련 자원을 포함한다. 사전 정의된 구조를 사용한다. 별도의 웹서버 필요 Jar파일의 일종으로 웹 애플리케이션 전체를 패키징하기 위한 Jar파일이다. 정리 해보자 war는 웹 애플리케이션 배포에 특화가 되어있고,정해진 구성을 지켜야한다. 또한 tomcat과 같은 서버 위에서 동작하기 위해 war배포가 있고, 어떻게 설정할지는 web.xml을 참고한다. war는 jar의 모든 파일+ 서블릿 컨테이너 같은 웹..
[Java] Static이란? 인스턴스를 생성하면, 각 인스턴스들은 서로 독립적이기때문에 서로 다른값을 유지한다. 경우에 따라서는 각 인스턴스들이 공통적으로 같은 값이 유지되어야 하는 경우, static을 붙인다. static 이 붙은 멤버변수는 클래스가 메모리에 올라갈때, 이미 자동적으로 생성이 된다. (인스턴스 생성 시점이 아님) static 이 붙은 메서드에서는 인스턴스 변수를 사용할 수 없다. static이 메서드는 인스턴스 생성없이 호출이 가능한 반면, 인스턴스 변수는 인스턴스를 생성해야만 존재하기 때문에 static이 붙은 메서드를 호출할때 인스턴스가 생성되어있을수도, 그렇지 않을수도 있어서 static이 붙은 메서드에서 인스턴스 변수의 사용을 허용하지 않는다. 반대로, 인스턴스 변수나 인스턴스 메서드에서는 static 붙..
[Java] finalize 메서드 사용 및 메모리 점유 모든 자바 클래스의 최상위 부모 클래스는 Object클래스이고, finalize메소드가 존재한다. Java API에는 이 메소드는 가비지 컬렉터가 레퍼런스를 잃은 클래스의 인스턴스를 가비지 컬렉션할 때 호출한다. 이 메소드는 객체 인스턴스가 가비지 콜렉션에 의해 소멸되는 시점에 특정한 동작을 수행해야할때도 요긴하게 사용할 수 있는 메소드이다. GC발생시에 즉각적으로 Collection되지 않는다. Finalize가 선언되어있으면, Finalization Queue에 들어간 후, Finalizer에 의해 정리가 된다. finalize 메소드를 수행하는데 오래걸리면, 그만큼 객체가 오랫동안 메모리를 점유하게 되고, 이는 OOM이 발생확률이 높아진다. 대부분 종료자의 주요목적은 메모리에서 제거되기 전에 개체에..
[Effective Java] Rules [53. Null 대신 빈 배열이나 컬렉션 사용] Null처리를 해줘야 하는데, 이를 잊은 경우 클라이언트 측에서 오류 발생가능 [3. private 생성자나 열거 타입으로 싱글턴임을 보증하라] 1. public final 을 이용하는 방법 private 생성자는 public static final 필드인 Instance를 초기화 할때 한번만 호출된다. 리플렉션기능을 통해 private 생성자를 호출할수 있다 -> 두번째 객체 생성 부터는 예외 처리 필요 2.정적 팩토리를 이용하는 방법 싱글턴에 대한 이해가 빠르다 API 를 변경하지 않고, 싱글턴 패턴을 포기할 수 있다. (싱글턴에 대한 직렬화는, serializable impl 과 transient와 readResolve를 추가해야 가능하다, 아니면 ..