일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 아두이노
- 자바
- 포인트클라우드
- cartograhper
- 디자인패턴
- 장애물인식
- 이펙티브자바
- Spring Batch
- 자바ORM표준JPA프로그래밍
- MySQL
- 프로그래머스
- 알고리즘
- 자료구조
- JPA
- 자율주행
- 배달로봇
- 운영체제
- 영속성컨텍스트
- 논문리뷰
- Java
- persistance context
- Python
- Jetson
- Database
- 딥러닝
- 논문
- Hibernate
- DeepLearning
- 파이썬
- 네트워크
- Today
- Total
목록Java (19)
제리 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을 획득하고 반납하였다. 두 번째로 각각의 인스..

static은 런타임시 클래스 로더에 의해 메서드 영역에 적재되며 프로그램이 종료될 때 까지 GC에 대상이 아니라고 알고있었다. 그런데, permanent영역과 metaspace에 관련된 글을 읽는 중 static이 heap영역으로 할당된다는 말이있어 혼란스러웠다. 먼저 permanent영역과 metaspace영역에 대해서 정리해보자. permanent영역 permanent영역은 클래스 내부의 메타 데이터를 저장하는 영역이다. heap영역에 속하며 class, method meta data, static object, variable, constant pool등을 관리했다. java8이전에는 permanent영역은 method영역으로 사용되었다. java8이후부터 사라졌으며 metaspace영역으로 대체..

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..

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 프로그램..
중첩 클래스 중첩 클래스 : 다른 클래스 안에 정의된 클래스를 말함. 중첩 클래스는 자신을 감싼 클래스에서만 사용되어야 한다. 만약 다른 쓰임새가 있다면 톱 레벨 클래스로 만들어야 함. public class A { private class B{ ... } } 중첩 클래스의 종류 : 정적 맴버 클래스, (비정적) 맴버 클래스, 익명 클래스, 지역 클래스 정적 맴버 클래스를 제외한 나머지는 내부 클래스에 해당됨. 정적 맴버 클래스 //정적 맴버 클래스 public class A { private static class B{ ... } } 특징 1. 정적 맴버 클래스는 다른 클래스 안에 선언되고 바깥 클래스의 private맴버에도 접근 할 수 있다는 점을 제외하면 일반 클래스와 같다. 2. 정적 맴버 클래스..
인터페이스 : 클래스가 어떤 인터페이스를 구현한다는 것은 자신의 인스턴스로 무엇을 할 수 있는지를 클라이언트에게 전달하는 것이다. 인터페이스는 오직 이 용도로만 사용해야한다. 인터페이스를 잘못 사용한 예 )상수 인터 페이스 상수 인터페이스란 메서드 없이 static final 필드로만 가득한 인터페이스를 말한다. 클래스에 정규화된 이름을 쓰는걸 피하고자 종종 사용한다고함 public interface PhysicalConstants { //아보가도르 수(1/몰) static final double AVOGADROS_NUMBER = 6.002_140_857e23; //_기호는 숫자 리터럴의 값에는 영향을 주지않고 읽기는 훨씬 간편하게 해줌 //볼츠만 상수 (J/K) static final double BO..

자바의 다중 구현 매커니즘 : 인터페이스, 추상 클래스 자바 8부터는 인터페이스도 default 메서드를 제공할 수 있다. 인터페이스 vs 추상 클래스 공통점 선언 내용은 존재하지만 구현 내용은 없다(추상 메서드를 갖는다) 인스턴스로 생성할 수 없다. 목적 인터페이스 : 함수의 껍데기만 존재해서 구현을 강제한다. 구현 객체가 같은 동작을 하도록 보장한다. Has - A 추상 클래스: 추상 클래스를 상속 받아 기능을 이용하고 추가시킨다. Is - A 다중 상속 인터페이스 : 여러개의 인터페이스를 구현할 수 있다. 추상 클래스 : 여러 클래스를 상속 받을 수 없다. 책 본문 내용중 타입이라는 표현은 구현해야하는 메서드를 아울러 표현하는 것으로 이해했다. 추상 클래스가 정의한 타입을 구현하는 클래스는 반드시 ..

상속의 위험성 외부 클래스를 상속할 때의 위험성은 앞선 '상속보다 컴포지션을 사용하라'라는 게시글에서 다뤘다. 여기서 외부란 프로그래머 통제권 밖에 있어서 언제 어떻게 변경될지 모른다는 뜻이다. 예를 들어 Set, List같이 프로그래머가 직접 다루지 않는 클래스들을 말한다. 상속은 문서화를 요구한다. 메소드를 재정의하면 어떤 일이 일어나는지를 정확히 정리하여 문서로 남겨야한다. 즉, 상속용 클래스는 재정의할 수 있는 메서드들을 내부적으로 어떻게 이용하는지 문서로 남겨야한다. 상속용 클래스에서 재정의 가능한 메서드는 어떻게 동작하는지 문서화해야할 필요가 있다. 만약, 재정의 가능한 메서드가 내부의 다른 재정의 가능한 메서드를 호출해서 사용하는 상황이라면 기능이 오동작 할 수 있다. 재정의 가능한 메서드는..