일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코딩테스트
- Redis
- flutter
- depromeet
- 자료구조
- 코드트리
- 코드 트리
- Sharding
- dip
- 부하 테스트
- 코딩
- C언어
- AOP
- OAuth
- c
- pub.dev
- 코딩 테스트
- nGrinder
- Kafka
- Scaffold
- java
- 디프만
- kakao
- 연습문제
- 디프만16기
- exception
- Oidc
- 운영체제
- Spring
- Kotlin
- Today
- Total
목록Java (13)
Nick Dev
https://www.inflearn.com/course/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EC%A4%91%EA%B8%89-2김영한님의 '김영한의 실전 자바 - 중급 2편' 강의를 바탕으로 작성된 글입니다.제네릭이란타입 안정성을 위해서 사용제네릭을 쓰면 코드 재사용 + 타입 안정성 모두 보장!!!사용법public class GenericBox { -> 타입 매개변수 private T value; public void set(T value) { this.value = value; } public T get() { return value; }}Generi..
CAS가 뭐야?Compare-And-Swap의 약어로, 멀티 쓰레드 환경에서 발생하는 동기화 문제를 해결하기 위한 알고리즘-** 현재 쓰레드에 저장된 값과 **메인 메모리에 저장된 값을 비교해서 일치하는 경우, 새로운 값으로 교체하고, 일치하지 않으면 재시도 진행위 과정이 하드웨어적으로 atomic하게 구현되어야 함CAS 목적결국 해당 변수에 대해서 동시에 딱 하나의 쓰레드만 값을 수정할 수 있게 함으로써 synchronized 또는 lock 을 사용하지 않고 동기화 문제(race condition)을 해결할 수 있다.CAS 동작 방식CAS 알고리즘을 위한 3가지 변수바꾸려는 변수바꾸려는 변수의 기댓값업데이트 할 값CAS 동작 방식package java.util.concurrent.atomic;publi..
volatile 키워드 의미해당 변수를 main memory에 저장하고 읽어오겠다고 명시하는 키워드volatile 키워드로 선언한 변수는 모든 읽고 쓰기를 cpu register(cpu cache)에 하지 않고 바로바로 main memory에 하겠다!!!volatile 변수 값 읽을 때, CPU cache가 아닌 main memory에서 읽어옴volatile 변수 값 쓸 때, CPU cache가 아닌 main memory에 씀기본적인 thread의 처리 방식thread가 작업을 시작하게 되면 main memory에서 해당 작업에 필요한 변수들을 자신의 CPU cahce에 복사해놓고 쓴다thread가 작업하고 있는 시점을 보면, main memory에서 가져온 변수가 cpu cache에 저장된 값과 mai..
# 💡 Thread란?### ✅ 정의- **process 내에서 실행되는 여러 흐름의 단위**- CPU 수행의 기본 단위 - **스케쥴링의 대상**이라는 말 (그 중에서 kernel thread가 scheduling 대상)### ✅ 특징- process의 **address space를 공유**한다 - **Code**, **Data**, **Heap** 영역 공유 - 각 thread는 **개인 stack 영역을 보유** - 다른 thread의 stack 영역 볼 수 있음 - 각 thread는 **개인..
이 내용을 정독하면 객체 지향의 4대 특성에 대한 오해가 풀리고 완벽히 이해할 수 있다우리가 알고 있는붕어빵틀과 붕어빵 비유,is a 관계등 잘못된 비유와 모호한 표현들을 바로 잡자!!!객체 지향이란?기계에 맞춰 절차적으로 프로그래밍하지 않고 사물을 인지하는 방식대로 프로그래밍하는 것객체 지향의 4대 특성캡상추다캡슐화, 상속, 추상화, 다형성1. 추상화 = 모델링⭐ 추상화란?구체적인 것을 분해해서 관찰자가 관심 있는 특성만 가지고 재조합 하는 것즉, 현실 사물의 특성들 중 해당 애플리케이션의 context(경계)에 맞는 특성만 가지고 재조합하는 것 = 모델링추상화의 결과 = 재조합의 결과 = 모델링의 결과 = 모델 = ClassApplication Context?Application Boundary라고 ..
✅ HashMap이란?key와 value로 짝지어 저장이 set를 하나의 Node로 본다이 Node의 배열이 곧 HashMap이다key값은 고유데이터 넣은 순서 보장 X✅ 성능과 관련있는 변수 3개1. initialCapacity초기 HashMap의 용량 = 버킷 갯수를 의미미리 잘 설정해놓으면 rehashing이 일어나지 않음DEFAULT_INITIAL_CAPACITY= 1 MAXIMUM_CAPACITY = 1 2. load factorHashMap이 어느정도 차야 자동으로 확장할지 정한 값0 ~ 1 사이의 값DEFAULT_LOAD_FACTOR = 0.7575% 차면 HashMap의 크기를 늘리겠다값이 커질수록공간의 오버헤드는 감소하지만HashMap에 여유 공간이 없어 해시 충돌 등으로 인해 조회, 넣..
Array와 ArrayList는 무엇이 다르고,ArrayList는 어떻게 배열의 크기를 동적으로 늘리는지, grow() 메서드를 통해 알아보자💡 Arrays(배열)➡ 특징동일한 타입의 값들을 하나의 묶음으로 저장한 자료 구조처음에 선언한 배열의 크기(길이)를 변경할 수 없다데이터 크기가 정해져 있을 때, 사용하는게 좋다딱 선언한만큼 사용하기에 메모리 관리가 효율적이다메모리에 연속적으로 나열되어 있어 index를 통한 접근 속도가 빠름💡 ArrayList➡ 특징확장 가능한 배열 (Resizable-array라고 표현함)배열처럼 순서가 있다Vector 클래스와 거의 유사차이점 : thread safe 하지 않음➡ Array와 다른점Array는 한번 용량을 설정하면 변경 불가능ArrayList는 용량 확장..
try-with-resource란?java 7에서 도입된 try-catch-finally를 개선한 문법💡 try-catch-finally사용 후 반납해야 할 자원들은 Closeable 인터페이스를 구현했고, 무조건 사용 후에 close() 메서드를 호출해야 한다호출하지 않으면 거의 장애 발생!!!🤦♂️ 문제점개발자가 실수로 close() 호출하지 않으면 바로 문제 발생⇒ 이를 해결하고자 나온 문법이 try-with-resources임💡 try-with-resourcesAutoCloseable 인터페이스를 구현한 클래스에 대해서 자동으로 자원을 반납해주는 기능 제공❓ 그럼 기존 Closeable 구현한 클래스들은 적용이 안되나…?AutoCloseable 인터페이스를 기존 Closeable 인터페이스..
오늘 알아볼 내용은 Error와 Exception이 무엇인지Checked Exception과 Unchecked Exception의 차이는 무엇인지💡Java 예외 구조💡 Error란?자바 프로그램 밖에서 발생한 예외 → 시스템이 종료되어야 할 수준서버의 디스크 고장메인보드 고장 → 개발자가 미리 예측해 방지하기 어렵다 대표적인 에러OutOfMemoryError : JVM에 할당된 메모리 부족으로 더 이상 객체를 할당하지 못할 때 발생하는 오류heap 사이즈 부족GC가 더 이상 메모리 확보하지 못할 때네이티브 메모리 공간 부족StackOverFlowErrorJVM 실행될 때 할당받은 stack의 크기를 넘어서서 메서드를 호출하게 되면 발생하는 오류💡 Exception개발자가 구현한 로직에서 발생한 실..
Garbage Collector 역할메모리 할당사용 중인 메모리 인식사용하지 않는 메모리 인식GC 종류 2가지Minor GCEden 영역이 꽉 차게 되면 시작되는 GCYoung generation에서 발생하는 GC과정Eden이 처음 꽉 차게 되면 Minor GC 이후 살아남은 객체들 S0로 이동(S0로 가정)S1은 emptyS0에 들어가기에 너무 큰 객체면 바로 Old영역으로 promotion또 Eden이 꽉 차게 되면 Minor GC 발생이때, Eden + S0 에서 살아남은 객체들이 S1으로 이동S0가 empty1, 2의 과정 계속 반복이렇게 Survivor 영역 사이 이동할 때마다 age 증가객체가 특정 age 넘으면 Old generation으로 promotionHotSpot JVM의 경우 def..