Java 52

스트림의 메서드

스트림에 대해 공부하던중 몇몇 유용해보이는 메서드들이 있어 이에대해 포스팅하게 됬다. orElse() List list = Arrays.asList(); // 컴파일 오류 발생 Double value = list.stream() .mapToDouble((a)->a) .average(); // 런타임 오류 발생 Double value = list.stream() .mapToDouble((a)->a) .average() .getAsDouble(); 위와 같은 코드를 작성하면 컴파일 에러가 발생한다. 이유는 average()를 이용해 평균값을 구할때 입력값이 아예 없으면 즉 빈 리스트를 불러와 평균값을 구할수가 없기 때문이다. 해당 리스트에 숫자형 데이터 "0"이라도 존재 한다면 "0"을 리턴하지만 빈 리스트..

Java/Java 2023.03.11

스트림 (Stream)

스트림 스트림(Stream)은 배열, 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자이다. 스트림을 사용하면 List, Set, Map, 배열 등 다양한 데이터 소스로부터 스트림을 만들 수 있고, 이를 표준화된 방법으로 다룰 수 있으며 스트림은 제공하는 다양한 메서드들을 이용하여 데이터 소스를 다룰수 있다. 어떠한 집합의 데이터들에 접근하는데 반복문으로 처리가 가능하다. 하지만 for문이나 Itorator를 사용할경우 코드가 길고 가독성이 떨어질수 있으나 스트림을 통해 구현한다면 코드를 좀더 직관적으로 작성이 가능하다. 선언형과 명령형 프로그래밍 비교 // List에 있는 숫자들 중에서 4보다 큰 짝수의 합계 구하기 // ------------------------반복문 ..

Java/Java 2023.03.10

파일 입출력 (InputStream, OuputStream, FileReader, FileWriter, File)

InputStream, OutputStream 자바에서는 입출력을 다루기 위한 InputStream, OutputStream을 제공한다. 스트림은 단방향으로만 데이터를 전송할 수 있기에, 입력과 출력을 동시에 처리하기 위해서는 각각의 스트림이 필요하다. 입출력 스트림은 어떤 대상을 다루느냐에 따라 종류가 나뉜다. 예를 들면, File을 다룰 때는 FileInputStream / FileOutputStream을 사용하고, 프로세스를 다룰 때는 PipedInputStream / PipedOutputStream을 사용한다. FileInputStream echo code >> helloWorld.txt 아무 파일이나 생성, 이후 FileInputStream으로 파일의 내용을 읽을수 있다. import java...

Java/Java 2023.03.09

람다(Lambda)

람다(Lambda) 람다식(Lambda Expression)은 함수형 프로그래밍 기법을 지원하는 자바의 문법요소이다. 간단히 말해서 메서드를 하나의 ‘식(expression)’으로 표현한 것으로, 코드를 매우 간결하면서 명확하게 표현할 수 있다는 큰 장점이 있다. (공부하면서 느낀것은 자바스크립트의 콜백(callback)함수와 굉장히 비슷했지만 자바에서는 함수형 인터페이스를 만들어주는 등 별도의 작업이 더 필요했다.) 비교 예제 함수형 인터페이스를 사용한 람다식 표현 public class Main { public static void main(String[] args) { int firstNum = 1; int secNum = 2; ExampleFunction example = (a, b) -> a -..

Java/Java 2023.03.09

컬렉션 프레임워크 (Collection Framework)

컬렉션 프레임워크 자바에서의 컬렉션이란 여러 데이터들의 집합을 의미한다. 여러 데이터들을 그룹으로 묶어 놓은것이 컬렉션이며 이 컬렉션을 다루는 기능의 메서드들을 미리 정의해 놓은것을 컬렉션 프레임워크라한다. 컬렉션 프레임워크는 특정 자료구조를 이용하여 데이터의 접근, 삽입, 검색, 삭제 등의 동작을 수행하는 메서드들을 제공해준다. List List인터페이스는 배열과 같이 객체를 일렬로 정렬해놓은 구조이며 각 요소들은 객체로 이루어저 있고 인덱스로 각 객체들을 관리한다. List의 큰 특징으로는 인덱스로 데이터의 순서를 관리하기 때문에 데이터의 순서가 유지되며 데이터값이 중복되더라도 저장이 가능하다. List 인터페이스의 공통 메서드 기능 리턴타입 메서드 설명 객체 추가 void add(int index,..

Java/Java 2023.03.08

try(), catch() - 예외 처리(Exception Handling)

컴파일 에러 컴파일 에러란 이름 그대로 컴파일 할때 발생하는 에러이다. 주로 문법적인 문제로 인한 신택스(syntax)오류로 발생하며 신텍스 에러(Syntax Errors)라고도 한다. 컴파일 에러는 자바 컴파일러가 오류를 감지하여 사용자에게 알려준다. 흔히 에디터(IDE)에서 나타나는 에러가 이에 해당된다. 런타임 에러 런타임, 즉 코드가 실행되며 발생하는 에러이며 컴퓨터가 수행할 수 없는 특정한 작업을 요청할 때 발생한다. 런타임 에러는 현재 실행중인 코드가 잘못되었다면 자바 가상 머신(JVM)이 감지하여 해당 코드부터 실행을 중단한다. 예외 클래스 자바에서는 오류를 발견하면 예외 클래스로부터 인스턴스를 생성하며 그 인스턴스를 통해 예외처리를 한다. 모든 예외클래스의 최고 상위 클래스는 Excepti..

Java/Java 2023.03.07

제네릭 (Generic)

제네릭(Generic) 제네릭은 임시적인 타입을 정해주는 문법적 요소로 제네릭을 사용하면 클래스내의 필드(클래스변수 제외), 매개변수, 메서드에 구체적인 타입(String, int, char등)을 지정해 주지 않아도 되며 해당 클래스의 인스턴스를 생성할때 구체적인 타입을 정해준다. 즉 이를 이용하여 작성한 클래스 또는 메서드의 코드가 특정 데이터 타입에 얽매이지 않게 해둘수 있다. 기본 사용 방법 public class Main { public static void main(String[] args) { Generic genericDouble = new Generic(1.0); // Double 래퍼클래스(wrapper class) Generic genericInt = new Generic(1); // ..

Java/Java 2023.03.07

열거형 (Enum)

열거형(Enum) 열거형은 서로 연관된 상수들의 집합이다. 기본 예시) enum Seasons {SPRING, SUMMER, FALL, WINTER} //enum 열거형이름 {상수명1, 상수명2....} Seasons.SPRING // 열거형이름.상수명 - 상수에 접근 열거형으로 정의된 상수마다 첫 상수에 정수값 0이 할당되며 순서대로 다음 정수값이 할당된다. 열거형 메서드 리턴 타입 메서드 설명 String name() 열거 객체가 가지고 있는 문자열을 리턴하며, 리턴되는 문자열은 열거타입을 정의할 때 사용한 상수 이름과 동일합니다. int ordinal() 열거 객체의 순번(0부터 시작)을 리턴합니다. int compareTo(비교값) 주어진 매개값과 비교해서 순번 차이를 리턴합니다. 열거 타입 va..

Java/Java 2023.03.06

의존성 주입(Dependency Injection, DI)

의존성 주입이란 객체가 자신이 의존할 객체를 스스로 만들도록 하는 것이 아니라 외부에서 주입해주는 것을 의미한다. 의존성 주입을 사용하는 이유로는, 어떠한 앱의 하나의 클래스를 수정 혹은 변경이 이뤄질 경우 연결된 다른 클래스들을 수정할 필요 없이 해당 앱의 설정클래스(Appconfigurer)만 변경하게끔 만들기 위해서이다. 즉, 코드의 수정과 변경에 용이하게 끔 만들기위해 의존성 주입을 사용한다. 예제) public class Main { // 맨밑의 메인클래스에서 Kiosk 인스턴스를 이용해 앱을 실행하면 //각각의 인스턴스들이 각자가 필요한 다른 인스턴스들을 직접생성한다. static class Kiosk{ ProductRepository productRepository = new ProductR..

Java/Java 2023.03.05

복사 생성자와 싱글톤

이번 포스팅은 자바를 이용하여 간단한 Kiosk 프로토타입을 만들어 보던중 발생한 몇가지 버그에 대한 글이다. (Git : https://github.com/Mason3144/burger_shop-kiosk-practice ) 복사 생성자(Copy Constructor) 장바구니 기능을 구현하던중 발생한 버그이다. 처음 의도한 결과로는 메뉴에서 하나의 제품을 선택한뒤 옵션을 선택해주고 장바구니에 넣는다. 다시 동일한 제품을 선택하게되면 모든 옵션들이 초기화되어 다시 옵션을 선택해준다. 이었다. 하지만 처음 의도한 것과는 달리 동일한 제품을 선택하게 되면 옵션들이 전에 선택했던 옵션 그대로 저장되어 나타나게 되었다. 문제의 발단은 메뉴의 모든 제품(음식 객체)들의 정보를 담은 배열에서 하나의 객체를 선택,..

Java/Java 2023.03.05