일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- COPYOFRANGE
- HandlerMethod
- CQS
- propagation
- optimistic lock
- SPOF
- 단어변환
- type eraser
- 프로그래머스
- TDZ
- 벌크연산
- Generic method
- assertJ
- demand paging
- CORS
- API
- ExceptionResolver
- #@Transacional
- NestJS 요청흐름
- Java
- IllegalStateException
- hoisting
- tracking-modes
- cross-cutting concerns
- Transaction
- RequestMappingHandlerMapping
- 역정규화
- wrapper class
- generic type
- pessimistic lock
- Today
- Total
목록Language/Java (59)
jingyulog
병행(concurrent)와 병렬(parallel) 싱글 코어에서 하나의 쓰레드로 두 개의 작업을 수행한 시간보다 오히려 두 개의 쓰레드로 작업한 시간이 싱글쓰레드로 작업한 시간보다 더 걸리게 되는데 그 이유는 쓰레드간의 context swtiching에 시간이 걸리기 때문이다. 따라서 싱글 코어에서 단순히 CPU만을 사용하는 계산 작업이라면 오히려 멀티쓰레드보다 싱글쓰레드로 프로그래밍하는 것이 더 효율적이다. 다음은 하나의 쓰레드로 두 가지 작업을 하는 코드와 결과이다. public class ThreadEx4 { public static void main(String[] args) { long startTime = System.currentTimeMillis(); for (int i = 0; i < ..

Amdahl's Law 암달의 법칙은 컴퓨터 시스템의 일부를 개선할 때, 전체적으로 얼마만큼의 최대 성능 향상이 있는지 계산하는데 사용된다. 병렬 컴퓨팅을 할 경우, 일부 병렬화가 가능한 작업들은 사실상 계산에 참여하는 컴퓨터의 개수에 비례해서 속도가 늘어난다. 하지만 암달의 법칙에 의해 아무리 컴퓨터의 개수가 늘어나더라도 속도의 한계는 정해져있다. 병렬 vs 병행 병행(Concurrent)은 멀티스레드 프로그래밍을 의미한다. 병렬(Parallel)은 멀티코어 프로그래밍을 의미한다. 따라서 여기서는 병행 프로그래밍(동시성 프로그래밍, 멀티스레드 프로그래밍)을 알아본다. Context Switching 그렇다면 어떻게 동시에 프로그램들이 실행될 수 있는 것일까? 컴퓨터는 0초부터 1초까지 시간을 잘게 쪼갠..
DataInputStream, DataOutputStream DataInputStream과 DataOutputStream은 기본형 타입과 문자열을 읽고 쓸 수 있는 객체이다. 다음은 다양한 타입을 파일에 저장하고, 읽어들이는 코드이다. package theory.io; import java.io.DataOutputStream; import java.io.FileOutputStream; public class DataInputExam { public static void main(String[] args) throws Exception { // /tmp/score.dat 파일에 저장한다. String name = "kim"; int kor = 90; int eng = 60; int math = 70; do..

Composite Pattern 과 Decorator Pattern 폴더와 파일을 다이어그램으로 표현해보자 폴더와 파일의 공통점으로 FileComponent로 뽑아낸다. 여기서 핵심은 폴더는 파일 컴포넌트를 가진다. 즉, 폴더는 파일 컴포넌트를 구현하는 폴더나 파일을 가질 수 있다는 소리이다. (일체화). 이런 형식을 Composite Pattern이라고 한다. 이 내용을 아래 코드로 작성할 수 있다. package theory.composite; public abstract class Node { private String name; // 폴더와 파일의 이름 public Node(String name) { this.name = name; } public String getName() { return n..

I/O Stream이란 byte나 char의 흐름이다. 그리고 byte 단위의 입출력 클래스는 InputStream, OutputStream의 후손이다. 마찬가지로 char 단위의 입출력 클래스는 Reader, Writer의 후손이다. 그리고 이들은 모두 추상 클래스이다. 또한 자바 I/O 객체는 사용하면 꼭 close를 해줘야한다. https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/package-summary.html java.io (Java SE 17 & JDK 17) package java.io Provides for system input and output through data streams, serialization a..

java.io.File 클래스는 파일의 크기, 파일의 접근 권한, 파일의 삭제, 이름 변경 등의 작업을 할 수 있는 기능을 제공해 준다. (디렉토리도 파일 취급) 하지만, 파일 인스턴스를 만들었다고 해서 실제 폴더에 파일이 생성되는 것은 아니다. https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/File.html File (Java SE 17 & JDK 17) All Implemented Interfaces: Serializable, Comparable An abstract representation of file and directory pathnames. User interfaces and operating systems use..