일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 플러터 공부
- Kafka
- 스프링 공부
- nestjs공부
- 프로그래머스
- Flutter
- K8S
- DDD
- 스프링부트공부
- nestjs스터디
- 알고리즘공부
- 카프카
- JPA예제
- JPA
- 기술면접공부
- JPA공부
- 코테공부
- 스프링
- 스프링부트
- 기술공부
- 플러터 개발
- nestjs
- 스프링공부
- 자바공부
- querydsl
- JPA 공부
- 자료구조공부
- JPA스터디
- Axon framework
- 코테준비
- Today
- Total
목록Language/[Java] (91)
DevBoi
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..
해시, 쉽게말하면 많은 것들이 있지만 Hash 기반으로 동작하는 hashMap에 대해서 동작방식을 정리한다. Object클래스 기준, hashCode메서드에 대한 설명이다. 해당 메서드는 오브젝트의 해시코드 값을 리턴하고, 두 오브젝트가 equals를 통해 같다고 판별되면 hashcode또한 동일해야한다. equals메서드를 통해 다르다고 판별되더라도, hashcode가 꼭 달라야하는 것은 아니지만 hashCode가 다르면, 해시 테이블을 사용할때 성능상 이점이 나온다. HashMap은 기본적으로 bucket배열을 16으로 설정한다. bucket이란, HashTable에 데이터를 담는 공간을 의미한다. 이 용량은 설정해 놓은 LOAD_FACTOR기준에 다다르면 자동으로 2배씩 증가한다. 용량을 작게 설정..
깊은 복사란 -데이터 자체를 통째로 복사한다. -복사된 두 객체는 완전히 독립적인 메모리를 차지한다. -value type의 객체들은 깊은 복사를 하게 된다. 얕은 복사란 최소한의 복사만 한다. 인스턴스가 메모리에 새로 생성되지 않는다. 값자체를 복사하는 것이 아니라 주소값을 복사하여 같은 메모리를 가리킨다. 얕은 복사 (주소값을 공유) 깊은 복사 (값을 공유하여, 신규 객체 생성) -cloneable인터페이스 구현, 복사 생성자, 복사 팩터리 등등 인스턴스를 new로 신규로 만들어서, 새로운 인스턴스를 탄생, 값을 복사하여 신규 인스턴스를 생성한다.
공통점 : 웹 통신 간 유지하려는 정보를 저장하기 위해 사용하는 것 Http프로토콜의 특징이자 약점을 보완하기 위해 사용된다. 1. Connectionless 프로토콜 (비 연결지향) 클라이언트가 서버에 요청을 했을때, 그 요청에 맞는 응답을 보낸후 연결을 끊는 처리 방식이다. 그 요청에 맞는 응답을 보낸 후 연결을 끊는 처리 방식이다. -Http 1.1 버전에서 연결을 유지하고, 재활용 하는 기능이 Default로 추가되었다. (keep-alive 값으로 변경가능) 2.Stateless 프로토콜 (상태정보 유지안함) 클라이언트의 상태 정보를 가지지 않는 서버 처리 방식이다. 클라이언트와 첫번째 통신에서 데이터를 주고받아도, 두번째 통신에서 이전 데이터를 유지하지 않는다. 3. 실제로 데이터 유지가 필요..
롬복은 어노테이션으로 편하게 getter,setter,생성자 등등을 사용할 수 있는 것이다. 근데, 사용시에 주의해야하는 사항이 있다. AllArgsConstructor, RequiredArgsConstructor 사용금지 생성자 필드에 대한 자동 생성 어노테이션이다. 해당 필드에 대한 값의 순서만 바꾸면 ,생성자에대한 값도 바뀌게 되는데, 이는 오류 발생이 높다. 아무 생각없이 순서만 바꿔도 로직에서 동작을 안하거나,잘못된 값들이 저장 되는 위험이 있다. AllArgs -> 모든 필드를 생성자의 인수로 만들어주는 어노테이션 Required -> 초기화 되지않은 final, @nonnull이 붙은 필드에 대해 생성자를 생성해준다. @EqualsAndHashCode 사용자제 EqualsAndhashCode..
팩터리 메서드 : 객체의 클래스 생성을 담당하는 메서드 생성자를 통해서 객체를 생성하지 않고, 생성 메서드를 통해서 객체를 생성하는 것을 정적 팩터리 메서드라고 한다. 그러면 생성자를 대신해서 정적 팩터리 메서드를 사용하면 뭐가좋을까 1. 이름을 가질 수 있다. 2.객체 생성을 캡슐화 가능하다 3. 하위클래스 타입으로 반환이 가능하다. 4.호출할때마다 신규 객체를 생성할 필요가 없다(싱글톤 유지시에)
jar : Java archive Java 어플리케이션이 동작할 수 있도록 자바 프로젝트를 압축한 파일 Class, 라이브러리 파일을 포함함 JRE Java Runtime Environment만 있어도 실행 가능함 War servlet/ Jsp 컨테이너에 배치할 수있는 웹 애플리케이션 압축파일 포맷 웹 관련 자원을 포함한다. 사전 정의된 구조를 사용한다. 별도의 웹서버 필요 Jar파일의 일종으로 웹 애플리케이션 전체를 패키징하기 위한 Jar파일이다. 정리 해보자 war는 웹 애플리케이션 배포에 특화가 되어있고,정해진 구성을 지켜야한다. 또한 tomcat과 같은 서버 위에서 동작하기 위해 war배포가 있고, 어떻게 설정할지는 web.xml을 참고한다. war는 jar의 모든 파일+ 서블릿 컨테이너 같은 웹..
인스턴스를 생성하면, 각 인스턴스들은 서로 독립적이기때문에 서로 다른값을 유지한다. 경우에 따라서는 각 인스턴스들이 공통적으로 같은 값이 유지되어야 하는 경우, static을 붙인다. static 이 붙은 멤버변수는 클래스가 메모리에 올라갈때, 이미 자동적으로 생성이 된다. (인스턴스 생성 시점이 아님) static 이 붙은 메서드에서는 인스턴스 변수를 사용할 수 없다. static이 메서드는 인스턴스 생성없이 호출이 가능한 반면, 인스턴스 변수는 인스턴스를 생성해야만 존재하기 때문에 static이 붙은 메서드를 호출할때 인스턴스가 생성되어있을수도, 그렇지 않을수도 있어서 static이 붙은 메서드에서 인스턴스 변수의 사용을 허용하지 않는다. 반대로, 인스턴스 변수나 인스턴스 메서드에서는 static 붙..
모든 자바 클래스의 최상위 부모 클래스는 Object클래스이고, finalize메소드가 존재한다. Java API에는 이 메소드는 가비지 컬렉터가 레퍼런스를 잃은 클래스의 인스턴스를 가비지 컬렉션할 때 호출한다. 이 메소드는 객체 인스턴스가 가비지 콜렉션에 의해 소멸되는 시점에 특정한 동작을 수행해야할때도 요긴하게 사용할 수 있는 메소드이다. GC발생시에 즉각적으로 Collection되지 않는다. Finalize가 선언되어있으면, Finalization Queue에 들어간 후, Finalizer에 의해 정리가 된다. finalize 메소드를 수행하는데 오래걸리면, 그만큼 객체가 오랫동안 메모리를 점유하게 되고, 이는 OOM이 발생확률이 높아진다. 대부분 종료자의 주요목적은 메모리에서 제거되기 전에 개체에..
[53. Null 대신 빈 배열이나 컬렉션 사용] Null처리를 해줘야 하는데, 이를 잊은 경우 클라이언트 측에서 오류 발생가능 [3. private 생성자나 열거 타입으로 싱글턴임을 보증하라] 1. public final 을 이용하는 방법 private 생성자는 public static final 필드인 Instance를 초기화 할때 한번만 호출된다. 리플렉션기능을 통해 private 생성자를 호출할수 있다 -> 두번째 객체 생성 부터는 예외 처리 필요 2.정적 팩토리를 이용하는 방법 싱글턴에 대한 이해가 빠르다 API 를 변경하지 않고, 싱글턴 패턴을 포기할 수 있다. (싱글턴에 대한 직렬화는, serializable impl 과 transient와 readResolve를 추가해야 가능하다, 아니면 ..