일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래머스
- 자바ORM표준JPA프로그래밍
- MySQL
- 네트워크
- 알고리즘
- JPA
- 논문
- 자바
- 운영체제
- Jetson
- Spring Batch
- cartograhper
- 아두이노
- Python
- DeepLearning
- 자료구조
- 디자인패턴
- Hibernate
- 영속성컨텍스트
- persistance context
- 논문리뷰
- 장애물인식
- 자율주행
- Java
- 배달로봇
- 딥러닝
- Database
- 파이썬
- 이펙티브자바
- 포인트클라우드
- Today
- Total
목록Java (8)
제리 devlog
synchronized는 lock을 사용해 동기화를 시킨다. 하지만 사용 방식에 따라 혼동되기 쉽다. synchronized는 4가지의 사용법이 있다. sychronized method, sychronized block, static sychronized method, static synchonized block. 이 포스팅에서는 이 4가지 방식의 차이인 lock이 적용되는 범위를 중점으로 다룬다. 1. synchronized method synchronized method는 클래스의 인스턴스에 대하여 lock을 건다. 다음과 같은 상황을 보자. 첫 번째로 하나의 인스턴스에 대하여 2개의 thread가 경합하는 상황이다. 결과를 확인해보자. 순서대로 lock을 획득하고 반납하였다. 두 번째로 각각의 인스..
Garbage Collector란? Garbage Collector는 대부분의 객체는 금방 접근 불가한 상태가되고, 오래된 객체가 젊은 객체를 참조하는 일은 아주 적게 존재한다는 'weak generational hypothesis'를 전제로 만들어졌다. Garbage Collector는 JVM의 runtime data area의 heap영역중 참조되고 있지 않는 객체를 데몬 스레드를 통해 제거한다. STW(stop-the-world)는 GC실행을 위해 애플리케이션이 멈추는 것을 의미한다. 대부분 GC알고리즘의 목표는 STW의 시간을 최소화하는 것이다. GC의 동작 과정 Hotspot VM의 heap영역은 young generation과 old generation영역으로 구분된다. young genera..
싱글톤 패턴이란? 인스턴스를 매번 생성하지 않고 최초에 생성한 객체를 공유하여 사용하는 패턴이다. 인스턴스 한 개로 여러 요청을 처리할 수 있다면 메모리상에서 효율적이며 객체의 추가적인 생성이 없으므로 성능이 빠르다. 하지만 하나의 객체를 공유한다는 점에 있어서 thread safe여부를 주의해야한다. 일반적으로 싱글톤 패턴은 생성자를 private로 선언하여 new키워드로 객체의 생성을 막고 정적 팩터리 메서드형태로 인스턴스를 반환한다. 방법1. synchronized method public class RemoteControl { private static RemoteControl remoteControl; private RemoteControl() { } public static synchroniz..
커맨드 패턴이란? 간단히 말하자면 커맨드 패턴은 요청을 객체의 형태로 캡슐화하여 처리하는 방식이다. 일반적으로 객체는 메서드를 통해 행동을 정의하지만, 행동 자체를 객체로서 표현한다는 의미이다. 만약, 전등을 객체로 표현하고 전등이 켜지는 행위는 아래와 같이 표현된다. public class Light { public void on() { System.out.println("전등 켜짐"); } } 커맨드 패턴에 따라 on()동작 자체를 객체로서 정의하면 아래와 같은 코드가 된다. public interface Command { void execute(); } public class Light { public void on() { System.out.println("전등 켜짐"); } } public cl..
Socket이란? socket은 application layer와 transport layer사이의 인터페이스역할을 담당하며 서로 다른 endpoint간 통신을 위해서 사용된다. Socket의 동작 과정 서버측 동작 과정 1. 서버는 socket를 만든다. 2. 서버에서 ip주소와 port를 지정하여 소켓에 바인딩한다. 3. 서버는 listen상태가 되어 클라이언트의 요청을 기다린다. 4. 클라이언트의 요청을 받아드리고 데이터 송수신을 위한 소켓을 생성한다. 5. 클라이언트와 데이터를 송/수신한다. 6. 연결을 종료한다. 클라이언트측 동작 과정 1. socket을 만든다. 2. 서버에게 요청을 보내 connection을 맺는다. 3. 서버와 데이터를 송/수신한다. 4. 연결을 종료한다. Java 프로그램..
얼마전까지 의존성 주입에 @Autowired방식을 맹목적으로 사용해왔다. 다른 방식이 있는 줄은 모르고 어노테이션을 사용하면 의존성 주입이 간편해서 이런 방식으로 해왔다. 그러다 우연히 의존성 주입은 생성자를 사용한 방식이 좋다는 글을 몇차례 접한뒤 좋은 이유에 대해서 알아보고 실제로 적용해보기로 했다. 의존성 주입 3가지의 방식 첫번째, Field Injection Field Injection은 의존성을 주입하고 싶은 필드에 @Autowired 어노테이션을 붙여주면 의존성이 주입된다. @RestController public class PostController { @Autowired private PostService postService; } 두번째, Setter based Injection set..
public class NutritionFacts { private final int servingSize; //(ml, 1회 제공량) 필수 private final int servings; //(회, 총 n회 제공량) 필수 private final int calories; //(1회 제공량당) 선택 private final int fat; //(g/1회 제공량) 선택 private final int sodium; //(g/1회 제공량) 선택 private final int carbohydrate; } 식품 영양정보를 나타내는 class이다. 필드는 총 6가지가 있다. 1. 점층적 생성자 패턴 public class NutritionFacts { private final int servingSize; /..
장점 네이밍을 통해 직관적으로 파악할 수 있다. 생성자의 매개변수 타입이 겹칠 경우 사용이 사용할 수 있다. 호출될 때마다 인스턴스를 생성하지 않아도된다. 반환 타입의 하위 타입으로 객체를 반환 할 수있다. static method를 작성하는 시점에 반환할 객체의 클래스가 존재하지 않아도 된다. 단점 static method만 제공하면 하위 클래스를 만들 수 없다. static method는 프로그래머가 찾기 어렵다. 객체의 인스턴스를 얻기위해 보편적으로 public한 생성자를 사용하는 방법이 있다. public class Fruit{ int price; public Fruit(int price){ this.price = price; } public static void main(String[] args..