본문 바로가기

분류 전체보기

[Java] synchronized 메소드와 일반 메소드로 같은 자원에 접근하면 thread-safe할까? 면접 때 받았던 질문을 바탕으로 작성한 글입니다. synchronized가 완전히? 걱정없는? Thread-safe한 환경을 구성해줄 것이라고 믿고 있었지만 그렇지도 않았다. synchronized 메소드들만 사용 → thread-safe package test; public class synTest { private int a = 0; public static void main(String[] args) { synTest syn = new synTest(); new Thread( () -> { syn.setter(); }).start(); new Thread( () -> { for(int i = 0 ; i < 100 ; i++) System.out.println(syn.getter()); }).star..
[Java] Garbage Collection (GC) 알고리즘 GC의 기본적인 흐름 : Garbage 대상 식별 → 그 대상을 메모리에서 해제 들어가기 전에 용어 정리 stop-the-world GC를 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 상태. 이 상태가 발생하면 GC를 실행하는 스레드를 제외한 나머지 스레드는 모두 작업을 멈춘다. GC는 stop-the-world 때문에 서비스가 중단된다는 점에서 굉장히 유의할 것이 되고, 대개의 GC 튜닝이 이 stop-the-world 시간을 줄이는 노력들에 대한 것이다. Root Set JVM Stack 내의 Local Variable Section과 Operand Stack에서의 참조 (Java 메서드 내에서 실행하는 지역 변수 또는 파라미터에 의한 참조) JVM Method Area의 Constant Poo..
함수형 프로그래밍의 컨셉과 순수 함수 예시 함수형 프로그래밍의 컨셉 변경 가능한 상태를 불변상태(immutable)로 만들어 side effect를 없애자 모든 것은 객체이다 코드를 간결하게 하고 가독성을 높여 구현할 로직에 집중시키자 동시성 작업을 보다 쉽게 안전하게 구현 하자 변경 가능한 상태를 불변 상태로 만들어 side effect를 없애자 어떤 input parameter가 주어지느냐에 따라 output (return value) 이 정해지는 구조로 한다. 그 외에 어떤 외부 상태도 함수의 return 값에 영향을 줄 수 없다. 모든 것은 객체이다 함수형 언어에서는 모든 것이 객체. → 클래스 외에 함수 또한 객체 함수를 값으로 할당할 수 있다. 함수를 parameter로 전달할 수 있다. 함수를 return 값으로 반환할 수 있다. 사..
[프로그래머스] H-Index 문제 설명 및 주의점 문제를 간략히 설명하자면 위키피디아의 H-index의 정의를 인용하면서 그걸 구해보라고 하는 내용이다. 어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h가 이 과학자의 H-Index입니다. 예를 들어, 논문들의 인용 횟수 배열이 [ 3, 0, 6, 1, 5 ] 로 주어졌다면 3번 이상 인용된 논문이 3편 이상이고 나머지 논문은 3번 이하로 인용되었으므로 H-Index는 3이다. 하지만 문제엔 숨겨진 조건이 있었는데, 가능한 H-Index 중 가장 큰 값을 찾으라는 것이다. (질문 게시판 안 봤으면 절대 몰랐을 뻔 했다) 예를 들어 다시 위의 예시에서, 1번 이상 인용된 논문이 1편 이상(4편) 이고 나머지 논문은 1..
pure OOP / Java는 왜 pure OOP가 아닐까? pure OOP Pure Object Oriented Language 혹은 Complete Object Oriented Language 는 말 그대로 완전히 OOP를 지향하고 관련 기능을 support하는 언어를 말한다. primitive type의 변수조차 없이 모든 변수가 객체여야 한다는 점이 가장 특징적이다. 아래에서 좀 더 구체적인 pure OOP의 조건을 알아보자. pure OOP의 조건 Encapsulation/Data Hiding 캡슐화/은닉화 Inheritance 상속 Polymorphism 다형성 Abstraction 추상화 All predefined types are objects 이미 작성된 타입이 모두 객체 All user defined types are objects 사용자가 작성..
JDK vs JRE vs JVM JVM Java Virtual Machine .class파일 (byte code) 을 플랫폼(OS)에 맞추어 돌아갈 수 있도록 필요한 처리를 해준다 수행 역할 및 구성 Class Loader Loading Linking Initialization Execution Intepreter JIT compiler Garbage Collector Runtime Data Area Class Library, Native Method Library와도 연결시켜준다. JRE Java Runtime Environment 자바 실행 환경 말 그대로 자바 프로그램을 실행할 수 있는 최소한의 환경을 구성해주는 것이다. JRE = JVM + 클래스 라이브러리(Java API) JDK Java Development Kit 자바 개..
[보안] 대칭키 / 비대칭키(공개키) / SSL handshaking 대칭키 방식 암호화/복호화를 같은 키를 통해 수행하는 것. 장점 키의 크기가 상대적으로 작고, 알고리즘 내부 구조가 단순하여 개발이 쉽다. 연산 속도도 빠르다 단점 키 자체는 암호화 되지 않기 때문에 분실되거나, 타인에게 노출되면 큰일(...)난다. 키를 매우 신경써서 관리해야 한다. 키를 전달하기가 어렵기 때문에 잦은 키 변경이 있는 경우 불편함을 초래한다. 전자서명에는 적용할 수 없다. 안정성을 분석하기가 어렵고, 중재자가 필요하다. 결국 보안에 취약하다. 종류 블록 암호 스트림 암호 비대칭키 (공개키) 방식 암호화/복호화를 각각 다른 키로 수행하는 것. 암호화를 public key, 복호화를 private key로 사용하는 경우 어떤 내용이든 자신만 복호화할 수 있어야 하는 경우 사용 일반적인 데이..
[운영체제] 우선순위 역전 Priority Inversion 우선순위 역전 Priority Inversion 간단히 말하면, 어쩌다 보니 우선순위 가장 높은 프로세스가 가장 늦게 완료되는 상황을 말한다. 임계구역 / 공유자원에 대한 접근을 제어하다가 이러한 문제가 발생할 수 있다. 예시) 우선순위 역전이 일어나는 상황 task3이 공유 자원 접근 위해 바이너리 세마포어 (binary semaphore) 획득 스케줄러에 의해 task1이 수행됨 task1은 task3이 갖고 있는 세마포어를 획득하기 위해 기다림 (waiting) 스케줄러에 의해 task3이 다시 실행됨 이 때 세마포어와 관련 없는 task2가 task3보다 우선순위가 높아 스케줄러에 의해 실행됨. 그러면서 task3의 완료가 뒤로 밀리며, 우선순위가 가장 높은 task1이 결국 가장 늦게 수행됨 (..