Java 8

[Java] 자바 입출력 - 바이트 스트림과 문자 스트림이란?

1. 바이트 스트림 & 문자 스트림바이트 스트림Byte Stream은 데이터를 Byte 단위로 처리합니다.모든 종류의 파일 (텍스트, 이미지, 비디오 등) 데이터를 처리합니다.InputStream, OutputStream 클래스는 모든 바이트 기반 입출력 스트림의 최상위 추상 클래스입니다.문자 스트림Character Stream은 데이터를 Character 단위로 처리합니다.주로 텍스트 파일 데이터를 처리합니다.Reader, Writer 클래스는 모든 문자 기반 입출력 스트림의 최상위 추상 클래스입니다. 2. InputStreamReader & OutputStreamWriterInputStreamReader는 바이트 입력 스트림을 문자 입력 스트림으로 변환합니다.OutputStreamWriter는 바이트..

개발/Java 2024.06.25

[Java] 익명 클래스, 익명 객체란?

1. 익명 클래스란익명 클래스란, 이름이 없는 클래스입니다.이름이 없는 이유는 클래스의 정의(선언)과 인스턴스화가 동시에 진행 되기 때문입니다.public class People { ...} 우리가 일반적으로 선언하는 명명 클래스는 위과 같은 .java 파일을 별도로 작성합니다.아래 클래스의 경우 People이 클래스 이름이 됩니다. 그렇다면, 익명 클래스는 왜 이름이 없는지 사용법을 통해 알아보겠습니다. 2. 어떻게 사용하는가익명 클래스는 선언과 동시에 인스턴스화 된다고 말씀 드렸는데요, 그렇기에 익명 객체라고도 불립니다.익명 객체가 구현할 수 있는 대상은 추상 클래스 또는 인터페이스입니다.AbstractClass extendedObj = new AbstractClass() { @Override ..

개발/Java 2024.06.18

[Java] 자바 배열 원소를 이어 붙여서 출력하는 4가지 방법

개요 BOJ와 같은 알고리즘 문제 풀이를 하다 보면 위와 같이 일정한 패턴에 맞춰 배열 원소들을 출력해야 할 때가 있습니다. 자바에서 배열에 담긴 원소들을 형태에 맞춰 출력하는 방법 4가지를 알아보겠습니다. 1. for 문 + StringBuilderString[] arr = {"a", "b", "c", "d", "e"};StringBuilder sb = new StringBuilder();for(String str : arr) sb.append(str).append(", ");System.out.println(sb);a, b, c, d, e, 각 배열 원소를 순회하며 StringBuilder의 append를 호출해 합칠 수 있습니다. 각 원소 사이 구분자가 필요할 경우, append(구분자)를 한..

개발/Java 2024.05.31

[Java] Map을 순회하는 3가지 방법

1. entrySet() + IteratorMap은 Collection 인터페이스를 상속하지 않았기 때문에 Iterator를 갖지 않습니다.따라서 entrySet() 메서드 호출을 통해 Collection 인터페이스를 상속한 Set을 리턴한 후 Iterator로 순회하면 됩니다.Map map = new HashMap();map.put(1, "1번째 값");map.put(2, "2번째 값");Iterator> it = map.entrySet().iterator();while(it.hasNext()) { Map.Entry entry = it.next(); System.out.println("Key: " + entry.getKey()); System.out.println("Value: " + ..

개발/Java 2024.05.28

[Java] 자바 Optional 올바른 사용법

개요 Spring Data JPA를 활용해 CRUD 연산을 해보신 분이라면 findById 등의 api가 Optional를 반환함을 아실 겁니다. 이 포스팅에서는 Optional은 무엇인지, 왜 사용하는지, 어떻게 사용하는지 알아보겠습니다. Optional 이란  Optional은 메서드 반환 값으로 사용합니다. "No Result" 결과 없음이라는 값을 표현해야 될 때, 또는 null 반환 시 NullPointException을 야기할 때 사용합니다. // 1. Person 객체를 직접적으로 참조Person p1 = new Person();Person p2 = null;System.out.println(p1.toString());System.out.println(p2.toString()); // NPE..

개발/Java 2024.05.23

[Java] 자바 String 문자열, char 문자를 int 정수로 변환하기

개요 자바에서 숫자로 주어진 String 문자열 또는 char 문자 한 개를 어떻게 int 정수형으로 변환하는지 알아보겠습니다. 또한 Character 클래스의 getNumericValue 메서드와 digit 메서드를 사용할 때 주의점을 알아보겠습니다. String 문자열을 int 정수로 변환하기Integer 클래스의 parseInt(String s) 메서드를 사용합니다.Integer 클래스의 valueOf(String s) 메서드를 사용합니다. char 문자를 int 정수로 변환하기char 문자에서 '0' 을 뺍니다.Character 클래스의 getNumericValue(char ch) 메서드를 사용합니다. Character getNumericValue vs. digit getNumericValue 메..

개발/Java 2024.05.21

정적 팩토리 메서드 Static Factory Method

What 정적 팩토리 메서드란? 클래스의 인스턴스를 반환하는 단순한 정적 메서드다. 클래스는 클라이언트에 public 생성자 외에도 정적 팩토리 메서드를 제공할 수 있다. 팩토리 메서드 디자인 패턴과는 전혀 관련 없는 개념이니 혼동하지 않도록 주의하자. Why 장점 - 왜 사용하는가? 1. 이름을 가질 수 있다. Human(String name, int height) Human(String name, int weight) // 불가능, 위와 동일한 생성자 시그니처 Human(int weight, String name) // 가능, but 의미를 알 수 없음 동일한 시그니처로는 생성자를 단 하나만 만들 수 있다. 순서를 변경해 다른 시그니처로 만들 수 있지만, 개발자는 앞에오는 int 매개변수가 heigh..

개발/Java 2024.04.11

[프로젝트] 순수 자바로 웹 애플리케이션 서버(WAS) 구현하기

1. 개요 프로젝트 진행 동기 저는 여느 때와 다름없이 스프링을 학습하고 있었습니다. 그런데 문득 의문이 들었습니다. 어째서 아무 설정을 건드리지 않고도 프로젝트가 기본적으로 TCP/IP 계층의 8080 port를 사용하고 있는 것인지 Application 계층의 HTTP 메시지를 스펙을 따라 직접 파싱 하지 않고도 개발을 편리하게 할 수 있는지 위 궁금증을 해결하기 위해 구글링을 하던 중 Servlet 이라는 기술을 알게 되었습니다. 서블릿은 HTTP 요청 메시지를 읽어 들여 스펙에 맞게 파싱 하고, 응답을 내려줄 때도 스펙에 맞게 알아서 HTTP 응답 메시지를 작성해 준다는 것이었습니다. 그래서 서블릿 없이 순수한 자바로 WAS를 구현해보려 합니다. 프로젝트 달성 목표 개발한 웹 어플리케이션 서버(W..

개발/프로젝트 2024.02.20