본문 바로가기

JAVA/혼공자

(26)
[혼공자] Chapter 14-3 입출력 관련 API ▶ System.in 필드 자바는 콘솔에서 키보드의 데이터 입력을 받을 수 있도록 System 클래스의 in 정적 필드를 제공한다. 복습) System 클래스 : JVM이 운영체제의 일부 기능을 사용할 수 있게 하는 클래스 정적 필드 : 객체 생성 없에 클래스의 이름으로 사용할 수 있는 필드 System.in은 InputStream 타입 객체이므로, 바이트 기반 입력 스트림으로서의 역할을 할 수 있다. ▷ System.in으로 키보드에서 줄 단위로 입력받기 System.in 필드를 InputStream변수에 저장한다. 이렇게 만들어진 바이트 기반 입력 스트림 객체를 문자 입력 스트림으로 변환하기 위해 InputStreamReader을 사용한다. 마지막으로, 엔터를 기준으로 읽어오기 위해 BufferedR..
[혼공자] Chapter 14-2 보조 스트림 ❓보조 스트림이란❓ 보조 스트림이 필요한 이유 )) 기본 스트림에서 제공하는 기능에 더하여 데이터를 변환하거나, 형식을 지정하거나, 성능을 향상시키기 위해서 사용한다. 보조 스트림의 특징 )) 자체적으로 입출력을 할 수 없어서 다른 스트림과 연결해서 사용해야 한다. 이는 생성자의 매개값에 연결하려는 스트림을 전달함으로써 이루어진다. → 뒤에 나오는 보조 스트림 모두 보조스트림 변수명 = new 보조스트림(연결할 스트림 객체); 형식으로 선언된다. 이때 연결할 스트림은 기본 스트림(InputStream, OutputStream / Reader, Writer) 뿐 아니라 다른 보조 스트림과도 가능하다. ▶ 문자 변환 보조 스트림 복습 ) 바이트 기반 스트림은 모든 데이터를 다룰 수 있지만, 문자 기반 스트림..
[혼공자] Chapter 14-1 입출력 스트림 Intro. 스트림으로 입출력하는 자바 자바 프로그램은 데이터를 읽고 출력하는 입출력(I/O)을 빈번히 수행한다. Ex. 키보드로 입력, 모니터로 출력 / 파일 입출력 / 네트워크로부터 입력, 네트워크로 출력 등등 자바는 데이터는 '스트림'을 통해 입출력된다. 이때 스트림은 단일 방향으로 연속적으로 흘러가는 데이터의 흐름을 말한다. 스트림에서 흐르는 데이터는 바이트 단위이다. 스트림은 프로그램으로 들어오는지, 프로그램에서 나가는지에 따라 종류가 달라진다. 프로그램으로 들어오는 흐름을 입력 스트림, 프로그램에서 나가는 흐름을 출력 스트림이라고 한다. 예를들어, A 프로그램에서 B 프로그램으로 데이터를 보낼 때, A 프로그램에서는 출력 스트림을, B 프로그램에서는 입력 스트림을 사용해야 한다. 앞서 말했든,..
[혼공자] Chapter 13-2 LIFO와 FIFO 컬렉션 Intro. LIFO와 FIFO LIFO는 후입선출, FIFO는 선입선출로 LIFO는 접시 쌓기, FIFO는 은행 번호표를 생각하면 이해하기 쉽다. 자바에서는 LIFO로 Stack 클래스를, FIFO로 Queue 인터페이스를 제공하고 있다. 스택은 push, pop, peek 메소드를 제공하고 큐는 offer, poll, peek 메소드를 제공한다. Stack Stack은 List 인터페이스를 구현한 클래스이다. 하지만 생성하는 방법은 List의 여느 구현클래스와 달리 Stack stack = new Stack();으로 선언한다. 복습) List 인터페이스를 구현하는 ArrayList는 List list = new ArrayList();으로 선언했음 Stack 클래스의 주요 메소드는 아래와 같다. pus..
[혼공자] Chapter 13-1 컬렉션 프레임워크 ✍🏻 배열 복습 ✍🏻 한 번 생성된 배열은 길이를 바꿀 수 없다. 같은 타입의 데이터만 저장 가능하다. 생성 방법 : ① { 1, 2, 3, ... }로 원소를 주어서 생성하거나 ② new int[3]처럼 크기를 주고 기본값으로 초기화하여 생성한다. 원소에 접근 방법 : 대괄호에 인덱스를 넣어 접근 크기 접근 방법 : 배열 이름에 .length 붙이기 Intro. 배열의 한계 배열에도 객체를 저장할 순 있지만, 생성 후에는 길이를 변경할 수 없고 항목을 저장, 삭제, 추가하는 메소드가 없으므로 직접 인덱스를 사용해야 한다는 단점이 있다. (직접 인덱스를 사용하면, 인덱스 사이에 값을 추가할 수 없으며, IndexOutOfBoundsExcpetion 등의 에러가 발생할 수도 있다.) 따라서 객체를 저장하며..
[혼공자] Chapter 12-2 스레드 제어 ▶ 스레드 상태 스레드 객체를 생성하고 start( ) 메소드를 호출하면 스레드는 실행 대기 상태(Runnable)가 된다. 운영체제가 실행 대기 상태에 있는 스레드 중 하나를 선택하고, CPU가 run( ) 메소드를 실행하면 비로소 실행(Running) 상태가 된다. 실행 중인 스레드는 sleep( ), wait( ) 메소드 혹은 입출력 요청에 의해 일시 정지 상태(Blocked)로 가기도 하는데, 일시 정지 상태에서는 바로 실행 상태로 돌아갈 수 없고, 실행 대기 상태로 간 후 실행 상태로 가야 한다. interrupt( ), notify( ), notifyAll( ) 메소드를 통해 일시 정지 상태의 스레드를 실행 대기 상태로 만들수 있다. 혹은 sleep( )을 통해 스레드를 대기상태로 만든 경우,..
[혼공자] Chapter 12-1 멀티 스레드 ▶ 프로세스 사용자가 어플리케이션을 실행하면, 운영체제로부터 메모리를 할당받아 어플리케이션이 실행되는데, 이를 프로세스라고 한다. 자원의 관점에서 보면, 디스크 안에 있는 프로그램이 메모리에 적재되어 운영체제의 제어를 받는 상태를 의미한다. 자신만의 자원을 가지기 때문에 프로세스끼리는 서로 독립적이다. ▶ 스레드 프로세스 내부의 실행 흐름을 스레드라고 한다. 하나의 프로세스는 하나 이상의 실행 흐름을 포함하기 때문에 프로세스는 적어도 하나의 스레드를 가진다. 자원의 관점에서 보면, 스레드는 프로세스 내부에서 생성되므로 메모리와 파일 등 모든 자원을 프로세스 자원과 공유한다. 따라서 멀티 스레드 환경에서 한 스레드가 예외를 발생시키면 프로세스 자체가 종료될 수 있다. 이처럼 스레드는 다른 스레드들의 영향을..
[혼공자] Chapter 11-2 java.util 패키지 java.util 패키지는 자료구조(컬랙션 프레임워크)와 날짜 정보를 제공하는 클래스를 포함하고 있다. 이번 절에서는 날짜 정보를 제공하는 API를 알아보자. ❗Date와 Calendar은 현재 여러 문제들 때문에 잘 사용하지 않는다고 한다❗ 대신 LocalDate, LocalTime, LocalDateTime을 사용한다. https://madplay.github.io/post/reasons-why-javas-date-and-calendar-was-bad https://madplay.github.io/post/java8-date-and-time https://sujl95.tistory.com/3 [Java] Date, Calendar클래스가 왜 Deprecated됐는지? Java 에서 Date클래스와 C..