Java 19

[Java][Tutorial] 1-3. Learning the Java Language: Classes and Objects

The Java Tutorials have been written for JDK 8 3. Classes and Objects Constant 값을 수정할 수 없는 필드입니다. final 키워드로 표기합니다. Access Control 외부 클래스로부터 접근 제한 레벨을 지정하는 키워드입니다. Inner Classes 클래스 내부에 선언된 클래스 입니다. 접근 제한 Static class : 밖에 있는 필드에 접근할 수 없습니다. Non-Static class : 밖에 있는 필드에 접근할 수 있습니다. Nested Classes 내부 클래스를 가지고 있는 클래스 사용하는 이유 오직 클래스 안에서만 사용되도록 논리적으로 묶는 유용한 방법입니다. 캡슐화 효과를 얻을 수 있습니다. 직렬화 중첩 클래스의 직렬화..

Java 2024.01.14

[Java][Tutorial] 1-2. Learning the Java Language: Language Basics

The Java Tutorials have been written for JDK 8 2. Language Basics Variables 자료를 저장하기 위한 메모리 공간 입니다. 타입에 따른 메모리 크기가 할당됩니다. (값 X) member variable Instance Variables (Non-Static Fields) : 인스턴스 당 가지는 유일한 변수 생성 위치 객체별로 heap에 생성됩니다. Class Variables (Static Fields) : 클래스 당 하나만 존재하는 변수 생성시기 클래스 로더에 의해 클래스가 로딩될 때 생성됩니다. 생성 위치 클래스별로 heap에 생성됩니다. 공유변수 모든 인스턴스에서 공유됩니다. 거의 변경되지 않는 변수값에 사용합니다. local variable ..

Java 2024.01.14

[Java의 정석] 13-3. 스레드: 실행 제어

남궁성 님의 "Java의 정석" 책을 정리한 포스팅 입니다. 8. 실행 제어 상태 NEW 스레드가 생성되고 아직 start()되지 않은 상태 RUNNABLE 실행중 또는 실행 가능한 상태 BLOCKED 동기화 블럭에 의해 일시정지된 상태 WAITING, TIMED_WAITING 일시정지 상태(작업이 종료되지 않음) 일시정지 시간이 지정된 경우 TERMINATED 작업이 종료된 상태 메서드 sleep() 지정된 시간동안 스레드를 정지시킵니다. 지정한 시간이 지나고 나면 자동적으로 다시 실행대기 상태가 됩니다. join() 자신이 하던 작업을 멈추고 다른 스레드의 작업을 기다립니다. 지정한 시간동안 스레드가 실행되도록 합니다. 지정한 시간이 지나거나 작업이 종료되면 join()을 호출한 스레드로 다시 돌아와..

Java 2023.11.30

[Java의 정석] 13-4. 스레드: 동기화

남궁성 님의 "Java의 정석" 책을 정리한 포스팅 입니다. 9. 동기화 한 스레드가 진행중인 작업을 다른 스레드가 간섭하지 못하게 막는 것입니다. 멀티스레드의 경우 여러 스레드가 같은 프로세스 내의 자원을 공유해서 작업하므로 서로의 작업에 영향을 주게 됩니다. 한 스레드가 특정 작업을 끝마치기 전까지 다른 스레드에 의해 방해받지 않도록 하는것이 필요합니다. 임계영역 공유데이터를 사용하는 코드 영역입니다. 락 단 하나의 스레드만 공유데이터를 사용하도록 하는 매커니즘입니다. 해당 공유데이터를 사용하는 스레드는 락을 획득합니다. 임계영역의 모든 코드를 수행하고 나서 락을 반납하며, 다른 스레드가 반납된 락을 획득하여 임계영역에 접근할 수 있습니다. synchronized synchronized 키워드를 붙여..

Java 2023.11.30

[Java의 정석] 15-6. 입출력: Serialization

남궁성 님의 "Java의 정석" 책을 정리한 포스팅 입니다. 7. Serialization 객체를 데이터 스트림으로 만드는 것을 뜻합니다. 객체를 파일로 저장하거나 네트워크를 통해 서로 주고받을 때 필요합니다. 직렬화에서의 객체 직렬화에서의 객체는 "클래스에 정의된 인스턴스 변수의 집합"을 의미합니다. 클래스 변수나 클래스 메서드가 포함되지 않습니다. 역직렬화 시에 클래스 관련 정보는 불필요합니다. 내용물인 변수 값만 가지고 있으면 인스턴스를 메모리에 올릴수 있습니다. ObjectInputStream & ObjectOutputStream 객체를 다루는 보조 스트림 입니다. 인스턴스 변수의 직렬화에 사용됩니다. 직렬화 시 참조 타입의 객체 변수도 모두 포함됩니다. FileOutputStream fos = ..

Java 2023.11.29

[Java의 정석] 15-5. 입출력: File

"Java의 정석" 책을 정리한 포스팅 입니다. 6. File 파일, 디렉토리를 다루는데 사용되는 클래스 입니다. 제어 // 파일이름 (경로 포함) File f = new File("c:\\jdk1.8\\work\\ch15\\FileEx1.java"); // 디렉토리 경로, 파일이름 (경로 제외) File f = new File("c:\\jdk1.8\\work\\ch15", "FileEx1.java"); f.getName(); // 파일이름 (경로 제외) f.getPath(); // 경로 f.getAbsolutePath(); // 절대경로 f.getCanonialPath(); // 정규경로 f.getParent(); // 디렉토리 경로 File.pathSeparator; // OS에서 사용하는 경로 구분..

Java 2023.11.29

[Java의 정석] 15-4. 입출력: 표준 입출력

"Java의 정석" 책을 정리한 포스팅 입니다. 5. 표준 입출력 콘솔을 통한 데이터 입력과 콘솔로의 데이터 출력을 의미합니다. 자바에서는 표준 입출력을 위한 3가지 입출력 스트림을 제공합니다. 자바 애플리케이션의 실행과 동시에 사용할 수 있게 자동적으로 생성됩니다. System.in 콘솔로부터 데이터를 입력받는데 사용하는 입력 스트림입니다. InputStream System.out 콘솔로부터 데이터를 출력하는데 사용하는 출력 스트림입니다. PrintStream System.err 콘솔로부터 데이터를 출력하는데 사용하는 출력 스트림입니다. 에러 로그 출력 전용으로 사용됩니다. PrintStream

Java 2023.11.29

[Java의 정석] 15-3. 입출력: 보조 스트림

"Java의 정석" 책을 정리한 포스팅 입니다. 4. 보조 스트림 스트림의 기능을 보완하기 위한 보조적인 스트림 입니다. 스트림의 기능을 향상시키거나 새로운 기능을 추가할 수 있습니다. 실제 데이터를 주고받는 스트림은 아닙니다. 데이터를 입출력할 수 있는 기능은 없습니다. 스트림을 먼저 생성한 다음, 이를 이용해서 보조 스트림을 생성합니다. // 기반스트림 생성 FileInputStream fis = new FileInputStream("text.txt"); // 보조스트림 생성 BufferedInputStream bis = new BufferedInputStream(fis); // 보조스트림을 이용해서 데이터를 읽기 bis.read(); 바이트 기반 FilterInputStream & FilterOut..

Java 2023.11.29

[Java의 정석] 15-2. 입출력: 문자 기반 스트림

"Java의 정석" 책을 정리한 포스팅 입니다. 3. 문자 기반 스트림 문자를 처리하는 데 바이트 기반 스트림으로는 어려움이 있습니다. 한 문자를 의미하는 char 형의 크기가 2byte 입니다. 바이트 기반 스트림의 단위는 1byte 입니다. 이 점을 보완하기 위해 문자 기반의 스트림이 제공됩니다. encoding 읽기 : utf-8로 인코딩하여 읽기 쓰기 : utf-8로 인코딩하여 작성 Reader 추상클래스 문자 기반의 InputStream 입니다. read() 스트림 소스에서 문자를 읽습니다. byte 배열대신 char 배열을 사용합니다. Writer write() 문자를 스트림 소스에 씁니다.

Java 2023.11.29

[Java의 정석] 15-1. 입출력: 바이트 기반 스트림

"Java의 정석" 책을 정리한 포스팅 입니다. 1. 자바에서의 입출력 입출력이란? 컴퓨터 내부 또는 외부의 장치와 프로그램간의 데이터를 주고받는 것을 말합니다. 스트림 자바에서 입출력을 수행할 때, 두 대상을 연결하고 데이터를 전송할 수 있는 객체를 말합니다. 데이터를 운반하는데 사용되는 연결통로 역할을 합니다. 특징 단방향 통신만 가능합니다. 입력과 출력을 동시에 처리할 수 없습니다. 각각 입력스트림과 출력스트림이 필요합니다. FIFO 구조 먼저 보낸 데이터를 먼저 받습니다. 2. 바이트기반 스트림 바이트 단위로 데이터를 전송합니다. 출력의 단위가 모두 1byte 입니다. 입출력 대상에 따라 구현체가 제공됩니다. ByteArray : 메모리(byte) File : 파일 Piped : 프로세스 Aud..

Java 2023.11.29