본문 바로가기

전체 글172

[일일 회고] 22.01.24~25 - 자바의 동시성 프로그래밍과 몇 개의 아이템 적용 📚개발 일지 어제, 오늘은 자바로 멀티 프로세스와 스레드 스케줄링을 공부하고 간단하게 구현했다. 저번 주 프로젝트에선 탑다운, 설계에 많은 시간을 두었다. 하지만 너무 큰 범위로 설계해서 실제로 작게 쪼개 구현하는 일이 어려웠다. 이번 프로젝트는 설계를 대략적으로 잡고 바텀엄 방식으로 바닥부터 작은것 하나씩 구현했다. 구현하면서 처음 설계했던 부분을 보충하는 식이었다. 작게 구현하다 보니 구현체에 자신감이 생기고 즐거움이 있었다. 프로젝트에 적용한 아이템(?)은 다음과 같다. ✅ toString() 재정의 + StringBuilder 를 활용한 주요 정보 반환 2022.01.15 - 모든 구현 클래스에서 Object의 toString 재정의를 고려하자 🗣 에 정리했던 item12를 적용했다. 매번 객체의.. 2022. 1. 25.
자바의 동시성 프로그래밍, 가변 데이터를 동기화하는 3가지 방법(+a. 자바 기본 타입의 원자성에 대하여) 이 글은 책 이펙티브 자바 3판 Item78과 하단 Reference 참고했습니다. 잘못된 내용이 있다면 편하게 말씀해주세요 🙏🏻 주제 공유 중인 가변 데이터는 동기화해 사용하라 결론 가변 데이터는 공유하지 않는 게 좋다. 하지만 공유해야 한다면 가변 데이터의 읽고, 쓰는 동작에 동기화를 신경 써야 한다. 동기화 방법은 3가지(synchronized, Atomic class, volatile)가 있다. 적재적소에 사용하자. 목차 동기화란? synchronized Atomic class (java.util.concurrent.atomic) volatile 예제 StopThread +a 자바 기본 타입의 원자성에 대하여 동시성 프로그래밍에서 스레드 간 데이터를 공유할 때는 불변 데이터만 공유하거나 가변 데이.. 2022. 1. 24.
[주간 회고] 22.01. 3주차 🥕 🍳 일기 형태로 작성되었습니다. 월요일 오늘은 프로세스 메모리 구조 중 스택 프레임과 힙 메모리를 논리적인 관점에서 자바로 구현했다. 보통 사용자가 프로그램을 실행하면 프로세스가 생성되고 이에 따른 프로세스 메모리가 생긴다. 이 과정은 OS가 관리하는데 이를 직접 프로세스의 컴파일된 어셈블리 코드가 있다고 가정하고 프로세스의 시작점(e.g. main 함수)부터 시작하여 여러 함수들이 스택에 쌓이고 사라지며 그 안에 동적 할당이 있다면 힙에 할당하고 해제하는 시나리오대로 구현했다. 생각하지 못했던 점은 C언어를 사용할 때 malloc()에 메모리 크기만 정해주면 동적 할당이 쉽게 사용했지만 이를 실제로 구현하기엔 상당히 어려운 일이라는 것을 알았다. 동적 할당된 메모리의 위치는 어디에 두어야 하며 해제된 위치.. 2022. 1. 23.
자바 enum에서 ordinal 메서드 사용하지마...(세요) 🚫 이 글은 책 이펙티브 자바 3판 Item35와 하단 Reference 참고했습니다. 잘못된 내용이 있다면 편하게 말씀해주세요 🙏🏻 한 줄 요약 enum에서 ordinal 메서드 사용하지 말고 인스턴스 필드를 써라 enum 클래스에 기본 내장으로 ordinal() 메서드가 있다. 해당 상수가 열거 타입의 몇 번째 위치진이 반환하는 메서드이다. 아래 Esenmble enum에서 순서는 SOLO, DUET, TRIO... 순으로 oridinal()은 0, 1, 2... 순으로 결과가 나온다. numberOfMusicians() 메서드는 이 결과에 +1 하여 리턴하니 1,2,3,4,5... 순서의 값으로 나온다. enum Esenmble { SOLO, DUET, TRIO, QUARTET, QUINTET, SEX.. 2022. 1. 21.
자바의 'enum'과 'lambda'를 클래스로 이해해보기 🔎 잘못된 내용이 있다면 편하게 말씀해주세요 🙏🏻 자바의 'enum'과 'lambda'가 클래스로 어떻게 구현되는지 살펴보고 비교해보자 목차 enum과 클래스 lambda, 사용 방법과 주의사항 enum, enum + lambda, 클래스 비교 enum 보통 enum(열거형)은 일정 개수의 상수 값을 정의하고 이 값을 문자열로 대체하여 하드 코딩을 아름답게(?) 만들어 준다. 자바의 enum은 어떨까? 사실 조금 특별하다. 아래 예는 Operation 이름의 enum이다. enum Operation { PLUS("+"), MINUS("-"), TIMES("*"), DIVIDE("/"); private final String op; Operation(String op) { this.op = op; } } 위 .. 2022. 1. 21.
최적의 시간 복잡도를 찾아서 🐠 * 이 글은 책 소프트웨어의 품격 3장을 참고하여 작성되었습니다. 잘못된 내용이 있다면 편하게 말씀해주세요 🙏🏻 '시간 복잡도'는 알고리즘이 어떤 문제를 해결하는 데 걸리는 시간을 의미한다. 어떤 문제를 해결하는(같은 결과를 내는) 코드는 많다. 많은 코드 중 어떤 것이 좋을까? 보통 시간이 적게 걸리는 코드가 좋다고 한다. 바로 시간 복잡도가 낮은(효율이 좋은) 코드를 작성해야 한다. CS 이론이나 코딩테스트에서 시간 복잡도를 낮추기(효율을 좋게) 위해 여러 자료구조나 알고리즘을 최적화한다. 이때 예제는 하나의 함수에 대한 입, 출력을 최적화하여 빠른 코드를 작성한다. 하지만 실무에선 단순히 하나의 입,출력만 고려하는 것이 아니다. 다양한 메서드 간 연결과 함수의 사용 정도를 고려해 설계해야 한다. 예.. 2022. 1. 20.