개발/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

[Java] 자바 객체 배열, 리스트 정렬하기 - Comparable vs. Comparator

🚩목차개요 자바 객체 배열 또는 리스트를 정렬하는 세가지 방법을 알아보겠습니다. 예제에서는 int형 멤버변수 x, y를 갖는 Pair 클래스를 예로 들겠습니다. Pair의 정렬 기준으로 a가 작은 객체가 먼저, a가 같다면 b가 작은 객체가 먼저 오도록 하겠습니다.public class Pair { int x; int y; public Pair(int x, int y) { this.x = x; this.y = y; }} Comparable 인터페이스 구현 compareTo 메서드는 this 객체와 other(비교 대상) 객체 중 this가 other 보다 먼저와야 한다면 -1을, this가 other 보다 나중에 와야 한다면 1을, 정렬 우위가 동일하다면..

개발/Java 2024.05.19

정적 팩토리 메서드 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