숑숑이의 개발일기
article thumbnail
[Java] #19-2 자바 입출력 - byte 단위 입출력
Backend/JAVA 2023. 8. 14. 23:54

본글은 'Do it 자바 완전 정복' 책을 통한 공부내용을 정리한 글입니다. 자바 입출력(Java IO)는 프로그램을 기준으로 외부로부터 데이터가 들어오는 입력(input)과 프로그램에서 외부로 나가는 출력(output)으로 구성된다. byte 단위 입출력과 char 단위 입출력 자바의 입출력은 크게 byte 단위의 입출력과 char 단위의 입출력으로 나뉘는데, byte 단위의 입출력은 말 그대로 송수신하고자 하는 데이터를 byte 단위로 쪼개 보내고 받는 것이다. 모든 데이터는 byte의 모음이므로 어떠한 파일이든 상관없다. char 단위 입출력은 채팅 프로그램과 같이 텍스트 전송에 특화된 방법이다. 물론 byte 단위 입출력으로도 텍스트 정보를 송수신 할 수 있지만, char 단위 입출력이 훨씬 효츌..

[Java] #19.1 자바 입출력 - 파일 관리와 문자셋
Backend/JAVA 2023. 8. 13. 23:52

본글은 'Do it 자바 완전 정복' 책을 통한 공부내용을 정리한 글입니다. 데이터를 처리하는 모든 프로그램은 처리 대상이 되는 데이터를 읽거나 처리한 데이터를 저장 또는 출력하는 기능을 포함한다. 19장에서는 파일 또는 콘솔에서 다양한 형태로 데이터를 읽고, 이를 다시 파일 또는 콘솔로 출력하는 방법에 대해 알아본다. 파일 관리와 문자셋 자바의 입출력을 이해하려면 자바에서 파일을 관리하는 방법과 문자셋(charset)의 개념을 알 필요가 있다. 먼저 자바에서 파일을 관리하는 방법을 알아본다. 자바로 파일 관리하기 파일 객체 생성 자바의 File 클래스는 파일(file)과 폴더(directory)를 관리하는 클래스로, 다음처럼 대표적인 4개의 생성자 중 하나를 이용해 객체를 생성한다. 클래스의 이름이 F..

[Java] #18 람다식
Backend/JAVA 2023. 8. 10. 23:36

본글은 'Do it 자바 완전 정복' 책을 통한 공부내용을 정리한 글입니다. 람다식 람다식은 객체 지향형 언어인 자바에서 함수형 프로그래밍 방식을 쓸 수 있게 해주는 문법 요소다. 자바에서 람다식은 자바 8버전부터 사용할 수 있다. 자바에서 메서드를 사용하려면 항상 클래스 객체를 먼저 생성한 후 생성한 객체로 메서드를 호출해야 한다. 그런데 이 공통 기능을 일반적인 함수처럼 독립적으로 만든 후 모든 클래스에서 공통적으로 사용할 수 있다면 훨씬 효율적일 것이다. 하지만 자바는 객체 지향 언어이므로 외부에 독립적으로 함수를 구성할 수 없다. 항상 클래스 내부에 메서드로 존재해야 하고, 메서드를 사용하기 위해서는 클래스의 객체를 먼저 생성한 후에 호출해야 한다. 이를 해결하기 위해 나온 방법이 '람다식'이다...

[Java] #17.5-6 Stack<E> 컬렉션 클래스, Queue<E> 컬렉션 인터페이스
Backend/JAVA 2023. 8. 9. 13:10

본글은 'Do it 자바 완전 정복' 책을 통한 공부내용을 정리한 글입니다. Stack 컬렉션의 특징 Stack 컬렉션은 17장에서 다루는 5개 컬렉션 중 유일하게 클래스다. 즉, 자체적으로 객체를 생성할 수 있다. 상속 구조를 살펴보면 List 컬렉션의 구현 클래스인 Vector 클래스의 자식 클래스로 후입선출(LIFO: last in first out)자료구조를 구현한 컬렉션이다. 당연히 Vector의 모든 기능을 포함하고 있으며, 여기서 추가로 LIFO 구조를 위한 5개의 메서드가 추가됐다. 이 추가 메서드는 Stack 클래스에서 추가됐으므로 사용하려면 변수를 Stack 타입으로 선언해야 한다. Stack의 주요 메서드 구분 리턴 타입 메서드명 기능 데이터 추가 E push(E item) 매개변수의..

[JAVA] #17.4 Map<K, V> 컬렉션 인터페이스
Backend/JAVA 2023. 7. 20. 23:44

본글은 'Do it 자바 완전 정복' 책을 통한 공부내용을 정리한 글입니다. Map 컬렉션은 상속 구조상 List, Set와 분리되어 있다. 즉, List와 Set가 Collection 인터페이스를 상속받는 반면, Map는 별도의 인터페이스로 존재한다. Map 컬렉션의 특징 1) Key와 Value 한 쌍으로 데이터를 저장 Map 컬렉션은 Key(키)와 Value(값)의 한 쌍으로 데이터를 저장한다. 한 쌍의 데이터를 엔트리(entry)라고 하며, Map.Entry 타입으로 정의된다. Map는 데이터를 엔트리 단위로 입력받는 것이다. 2) Key : 중복 저장 불가, Value : 중복 가능 얼핏 보면 List와 비슷해 보이지만 List의 인덱스는 고정적인 반면, Map의 Key 값으로는 무엇이든 올 수..

[JAVA] #17.3 Set<E> 컬렉션 인터페이스
Backend/JAVA 2023. 7. 19. 23:57

본글은 'Do it 자바 완전 정복' 책을 통한 공부내용을 정리한 글입니다. Set 컬렉션의 특징 Set는 동일한 타입의 묶음이라는 특징은 그대로 갖고 있지만, 인덱스 정보를 포함하고 있지않아 집합의 개념과 같은 컬렉션이다. 인덱스 정보가 없으므로 데이터를 중복해 저장할 경우 중복된 데이터 중 특정 데이터를 지칭해 꺼낼 수 있는 방법이 없다. 따라서 동일한 데이터의 중복 저장을 허용하지 않는다. Set의 주요 메서드 Set에는 데이터의 추가, 삭제, 정보 추출, Set를 배열로 변환하는 메서드들이 포함되어 있다. 구분 리턴타입 메서드명 기능 데이터 추가 boolean add(E element) 매개변수로 입력된 원소를 리스트에 추가 boolean addAll(Collection

article thumbnail
[JAVA] #17 컬렉션 프레임워크, List<E> 컬렉션 인터페이스
Backend/JAVA 2023. 7. 18. 23:53

본글은 'Do it 자바 완전 정복' 책을 통한 공부내용을 정리한 글입니다. 컬렉션 프레임워크의 개념과 구조 컬렉션이란? 컬렉션(collection)은 동일한 타입을 묶어 관리하는 자료구조를 말한다. 한 컬렉션에는 동일한 타입의 데이터만 모아둘 수 있다. 컬렉션이 배열과 구분되는 가장 큰 특징은 바로 데이터의 저장 용량(capacity)을 동적으로 관리 할 수 있다는 것. 컬렉션의 저장 공간은 데이터의 개수에 따라 얼마든지 동적으로 변화할 수 있으며 컬렉션은 메모리 공간이 허용하는 한 저장 데이터 개수에 제약이 없다. 컬렉션 프레임워크란? 먼저 프레임워크(framwork)에 대해 알아보자. 일반적으로 단순히 연관된 클래스와 인터페이스들의 묶을을 라이브러리라고 한다. 프레임워크는 클래스 또는 인터페이스를 ..

[JAVA] #16 제네릭, 제네릭 클래스와 인터페이스, 제네릭 메서드
Backend/JAVA 2023. 7. 16. 18:41

본글은 'Do it 자바 완전 정복' 책을 통한 공부내용을 정리한 글입니다. 제네릭 클래스와 제네릭 인터페이스 자바에서는 다양한 종류의 클래스와 인터페이스를 제공하며 이들을 내부 멤버에서 활용하는 클래스를 작성하고자 할 때에는 많은 가짓수의 클래스를 생성해야한다. 이러한 비효율성을 한 번에 해결하는 데 필요한 문법 요소가 바로 제네릭(generic)이다. 제네릭 없이 여러 객체를 저장하는 클래스 작성 제네릭 개념 이전의 자바 문법 지식만으로 다음의 예시 코드를 살펴보자. class Apple {} class Goods1 { private Apple apple = new Apple(); public Apple getApple() { return apple; } public Apple setApple(App..

[JAVA] #15.5 쓰레드의 상태
Backend/JAVA 2023. 7. 15. 23:54

본글은 'Do it 자바 완전 정복' 책을 통한 공부내용을 정리한 글입니다. 쓰레드는 객체가 생성, 실행, 종료되기까지 다양한 상태를 가지며 각 쓰레드의 상태는 Thread.State 타입으로 정의되어 있다. Thread의 인스턴스 메서드 getState()를 이용해 쓰레드의 상태를 Thread.State 타입에 저장된 문자열 상숫값 중 하나로 리턴한다. Thread.State getState(); Thread.State는 enum 타입이다. 내부에 6개의 문자열 상수가 저장되어 있다. 쓰레드의 상태에 따라 특정 작업 수행시에는 아래와 코드와 같이 switch 선택 제어문을 이용한다. Thread.State state = myThread.getState(); switch (state) { case Thr..

[Java] #15.4 쓰레드의 동기화
Backend/JAVA 2023. 7. 8. 00:30

본글은 'Do it 자바 완전 정복' 책을 통한 공부내용을 정리한 글입니다. 동기화의 개념 동기화(sychronized)는 개념적으로 가장 쉽게 표현하면 하나의 작업이 완전히 완료된 후 다른 작업을 수행하는 것을 말한다. 반대로 비동기(asynchronous)는 하나의 작업 명령 이후 완료 여부와 상관없이 바로 다른 작업 명령을 수행하는 것을 말한다. 동기화의 필요성 멀티 쓰레드를 사용할 때 왜 동기화가 필요할까? 아래의 예시 코드를 보자. class MyData { int data = 3; public void plusData() { int mydata = data;// 데이터 가져오기 try {Thread.sleep(2000);} catch(InterruptedException e) {} data =..