java 17

I/O

I/O (input / output) 데이터 입출력 데이터가 들어오는 것 (Input)과 데이터가 나가는 것(Output)을 합쳐 I/O라고 합니다. 자바에서는 스트림, 채널, 버퍼 등을 통해 데이터 입출력이 가능합니다. Stream 스트림 스트림은 물이 한 방향으로 흘러가는 것처럼 단방향으로만 데이터 전송이 가능합니다. (입력과 출력 하나만 가능) 예를 들어 파일의 데이터를 읽고 저장하는 작업을 모두 수행해야 한다면, File Input Stream과 File Output Stream을 2개를 생성해야 합니다. 스트림은 바이트 스트림(Byte Stream)과 문자 스트림(Character Stream)으로 구분됩니다. 바이트 스트림 : 그림, 멀티미디어, 문자 등 모든 종류의 데이터 입출력이 가능함. ..

JAVA/JAVA 2022.02.06

Design Pattern 디자인 패턴 Visitor Pattern 방문자 패턴

Visitor Pattern 방문자 패턴 행동 패턴으로, 알고리즘이 작동하는 객체와 알고리즘을 분리하는 패턴입니다. 방문자 객체가 알고리즘이 작동하는 객체의 알고리즘을 관리합니다. Visitor Pattern 방문자 패턴이 적합한 경우 복잡한 객체 구조의 모든 요소에 대해 기능을 수행해야 하는 경우. 부수적인 비즈니스 로직을 정리해야 하는 경우 기능이 일부 클래스에서만 의미가 있고, 다른 클래스에서는 의미가 없을때. 장단점 장점 기존 객체를 수정하지 않고, 다른 객체와 함께 동작하는 기능을 추가할 수 있습니다. (개방폐쇄원칙) 같은 기능을 다양한 버전으로 관리할 수 있습니다. (단일책임원칙) 방문자 객체가 유용한 정보를 축적할 수 있습니다. 이 정보는 복잡한 객체 구조를 탐색하고, 이 구조의 각 객체에 ..

JAVA/DesignPattern 2022.01.03

Design Pattern 디자인 패턴 Template Pattern 템플릿 패턴

Template Pattern 템플릿 패턴 행동 패턴으로, 상위 클래스(인터페이스, 추상클래스)에서 알고리즘의 골격만 정의하고, 하위 클래스에서 재정의(Override)할 수 있도록 하는 패턴입니다. Template Pattern 템플릿 패턴이 적합한 경우 기존 알고리즘에서 몇가지 기능만 추가한 객체를 만들고 싶은 경우 (몇가지 기능이 추가된 하위 클래스를 생성) 서로 조금씩만 다른 클래스가 여러개 있는 경우 (공통의 기능을 템플릿으로 묶어내어 코드의 중복을 줄일 수 있음) 장단점 장점 많은 기능 중에서 몇가지만 재정의하여 객체를 생성할 수 있습니다. 다른 객체가 받는 영향을 줄일 수 있습니다. 중복되는 코드를 상위 클래스로 옮길 수 있습니다. 단점 몇몇 객체들은 알고리즘 구조를 생성하기 어려울 수 있습..

JAVA/DesignPattern 2021.12.31

Design Pattern 디자인 패턴 Startegy Pattern 전략 패턴

Startegy Pattern 전략 패턴 행동 패턴으로, 런타임에 객체의 행동이나 알고리즘을 결정할 수 있는 패턴입니다. 다양한 전략을 나타내는 객체와 전략 객체에 따라 행동이 다른 컨텍스트 객체를 생성합니다. Startegy Pattern 전략 패턴이 적합한 경우 런타임에 객체의 기능이나 알고리즘을 변경하고 싶은 경우 몇개의 행동(메소드)만 다른, 비슷한 객체가 많은 경우 비즈니스 로직에서 분리하고 싶은 경우 클래스에 알고리즘이나 기능을 변환하기 위한 대량의 조건 연산이 있는 경우 장단점 장점 런타임에 객체 내부의 알고리즘을 바꿀 수 있습니다. 알고리즘을 사용하는 코드에서 알고리즘을 구현하는 세부 기능을 분리할 수 있습니다. 합성(Composition)으로 상속(inheritance)을 대체할 수 있습..

JAVA/DesignPattern 2021.12.30

Design Pattern 디자인 패턴 Memento Pattern 메멘토 패턴

Memento Pattern 메멘토 패턴 행동 패턴으로, 객체의 과거 버전을 저장하기 위해 사용됩니다. 프로세스가 진행되는 중에 원하는 지점에서 객체를 저장하고, 나중에 저장한 지점으로 복원할 수 있습니다. (Undo) Memento Pattern 메멘토 패턴 사용이 적합한 경우 객체의 상태 변화 이력을 저장하고 싶은 경우 (스냅샷을 남기고 싶은 경우) field나 getter/setter를 이용해서 객체에 직접 접근하여 캡슐화가 손상된 경우 장단점 장점 캡슐화는 손상시키지 않고 객체의 상태 변화 이력을 저장할 수 있습니다. 객체의 상태 변화 이력을 관리함으로써 객체의 코드를 단순하게 할 수 있습니다. 단점 메멘토 패턴이 너무 자주 사용되면, RAM 사용량이 많을 수 있습니다. 과거 이력을 삭제할 수 있..

JAVA/DesignPattern 2021.12.27

Design Pattern 디자인 패턴 Factory Pattern 팩토리 패턴

팩토리 Factory 란? 팩토리는 객체의 생성만을 전담하는 객체입니다. Interface를 구현한 클래스가 여러 개인 경우 외부에서 각 상황에 맞는 클래스를 찾아 인스턴스를 생성해주어야 하는 불편함을 해결해주는 패턴입니다. 즉 Factory에서 각 상황에 맞는 클래스를 찾아서 객체를 생성해주도록 합니다. 팩토리 Factory 패턴 사용 클래스가 만들어야 하는 개체 유형(타입)을 미리 알 수 없는 경우 클래스를 특정하기 위한 서브 클래스가 필요한 경우 복합한 클래스 구조를 단순화하기 위한 경우 팩토리 패턴 구현 예시 아래와 같이 애완동물을 생성하는 기능을 담당하는 객체를 Factory라고 합니다. 애완동물을 생성하려고 한다면 아래와 같이 new를 이용해서 생성해주어야 합니다. 애완동물 꾼이 = new 애..

JAVA/DesignPattern 2021.12.07

Optional

Optional Class Optional 클래스는 스트림에서 Null Pointer Exception을 피할 수 있도록 도와주는 클래스입니다. Optional로 특정 클래스를 감싸서 사용합니다. 이렇게 하면 Optional 클래스 안에 MyClass가 담겨있는 모양이 됩니다. ① Null 값이 들어온 경우 Null을 대체할 수 있는 Default 값을 설정할 수 있습니다. ② 값이 없을 경우에는 Optional을 Null이 아닌 Empty 상태로 반환하여 처리합니다. private Optional soundcard; public Optional getSoundcard() { ... } Optional 객체 생성하기 ① emtpy : Empty 상태로 Optional 객체를 생성하기 Optional sc..

JAVA/JAVA 2021.11.07

스트림 Stream

Stream 스트림 스트림은 자바 8부터 추가되었으며, 람다식을 이용해 컬랙션의 요소를 하나씩 함수적 프로그래밍으로 처리할 수 있도록 해주는 기능입니다. ArrayList의 값을 모두 합산하려고 한다면 반복문을 사용해야 합니다. List arrayList = Arrays.asList(1,2,3,4,5); Integer sum = 0; for(Integer a : arrayList){ sum += a; } 스트림을 사용하면 아래와 같이 값을 합산할 수 있습니다. int sum1 = arrayList.stream().mapToInt(a->a).sum(); 스트림의 특징 ① 람다식을 이용해 요소를 처리합니다. 람다식을 이용해 기능을 구현하거나, 메소드를 호출하여 컬랙션의 요소를 하나씩 처리할 수 있습니다. ②..

JAVA/JAVA 2021.11.07

Collection 컬렉션

Collection Interface 자바의 인터페이스를 이용해 구현된 것으로 데이터를 저장하는 자료구조를 정의하는 프레임워크입니다. Collection 인터페이스의 종류 종류 특징 구현 클래스 List 순서가 있는 자료구조 Vector, ArrayList, LinkedList, Stack Set 순서가 없으며 중복값을 허용하지 않는 자료구조 HashSet, TreeSet Map key와 value로 이루어진 자료구조로 key는 중복값을 허용하지 않음 HashMap, TreeMap Queue 선입선출의 자료구조 Queue Deque 양방향 선입선출 자료구조 Deque Collection 인터페이스의 기본 Method method return 설명 size() int collection 객체의 길이(담긴 ..

JAVA/JAVA 2021.10.25