본문 바로가기

프로그래밍/Java

(32)
[Java] Stream Stream이란 Stream은 자바 8에서 추가된 컬렉션, 배열, I/O 자원 등의 데이터 소스를 처리 방법으로, 데이터의 흐름을 추상화하여 다양한 처리를 지원한다. Stream은 데이터 소스를 변경하지 않기 때문에 Stream으로 처리한 결과는 원본 데이터에 영향을 미치지 않는다. Stream은 지연(lazy)처리를 지원하기 때문에 Stream으로 처리한 데이터는 실제로 필요할 때 까지 계산되지 않고 필요한 시점에서 계산된다. 이러한 Stream을 사용했을 때 얻을 수 있는 가장 큰 장점은 간결하고 가독성이 좋은 코드로 작성이 가능하다는 점이다. int[] numbers = {1, 2, 3, 4, 5}; int[] result = new int[numbers.length]; int index = 0; ..
[Java] toString()과 String.valueOf() 차이점 toString()과 String.valueOf()는 주로 Object값을 String형으로 형변환할 때 주로 사용하는 메소드들이다. 차이점 두 메소드의 차이점은 바로 null값에 따른 NullPointException 발생의 유무이다. toString() : null 값을 형 변환 시 NullPointerException(NPE)이 발생 / Object의 값이 String이 아니여도 출력 String.valueOf() : 파라미터로 null이 오면 "null"이라는 문자열을 출력 코드 예시 public static void main(String args[]) { Object obj = null; System.out.println(obj.toString()); // NullPointerException ..
[Java] 배열 자르기 배열 자르기 오늘은 자바에서 배열이 하나 주어졌을 때 시작 인덱스와 마지막 인덱스 범위만큼 배열을 자르는 방법을 소개하고자 한다. 예를 들어 1부터 10까지 값을 가지는 배열에서 시작 인덱스를 3으로, 마지막 인덱스를 7로 주어 다음과 같은 결과를 얻고자 한다. 기존 배열 : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 시작 인덱스 : 3 마지막 인덱스 : 7 특정 범위의 배열 : [4, 5, 6, 7] 1. System클래스의 arraycopy 메소드 System 클래스에서 제공하는 arraycopy() 메소드를 활용하여 특정 위치부터 특정 개수만큼 새로운 배열에 값을 할당할 수 있다. System.arraycopy(A, B, C, D, E); 매개변수 A : 원본 배열 B : 원본 배열에..
[Java] scan.next() 와 scan.nextLine의 차이 Scanner 클래스를 이용하여 입력받을 때 String 타입의 데이터를 받기 위해서 next() 메소드를 이용할 수 있다. 하지만 next() 메소드를 통해 문자열을 읽을 때, 공백이 포함되면 공백을 기준으로 앞에 한 단어만 읽어 오기 때문에 원하는 입력값이 출력되지 않는 경우가 발생한다. 코드 예시) import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // Hello World를 입력한다. String str = sc.next(); System.out.println(str); } } 결과 : Hello 이러한 경우를 방지하기 위해서 공백이 포함..
[Java] Enum Enum이란 Enumeration의 약자로 몇 가지 상수의 집합을 정의하는 타입으로 클래스의 특수한 형태이다. 집합이 갖는 값이 한정되어 있고 다른 값이 허용되지 않는 경우에 사용된다. ex) - 사계절 : 봄, 여름, 가을, 겨울 - 요일 : 월, 화, 수, 목, 금, 토, 일 - 성별 : 남성, 여성 사용 이유 1. 코드가 단순해지며, 가독성이 좋아진다. 2. 인스턴스 생성과 상속을 방지하여 컴파일 시에 상수값의 타입안정성이 보장된다. 3. enum 키워드를 통해 구현의 의도가 열거임을 분명하게 알 수 있다. 내부 API public enum Rank { THREE(3, 4_000), FOUR(4, 10_000), FIVE(5, 30_000); private final int match; privat..
[Java] 문자열 배열에 저장하기 split() 메소드를 이용하여 문자열을 String 배열에 넣기 한 글자 씩 배열에 저장 String str = "hello"; String[] arr = str.split(""); 결과 arr[0] = "h" arr[1] = "e" ... arr[4] = "o" 공백을 기준으로 나누어 배열에 저장 String str = "hello world"; String[] arr = str.split(" "); 위 같은 경우 공백을 기준으로 나누어 배열에 저장한다. str.split("")과 str.split(" ") 는 쓰임이 다르니 잘 구분하여 사용하자. 결과 arr[0] = "hello" arr[1] = "world" 특정한 구분자를 기준으로 배열에 저장 String str = "hello,world"; ..
[Java] replace()와 replaceAll() replace() replace란 자바에서 문자열을 치환할 때 쓰는 메소드이다. replace("찾을 문자", "치환할 문자"); 정도로 이해하고 쓰면 되겠다. ex) String str = "Hello World"; System.out.println(str); // 결과 : Hello World str = str.replace(" ", ""); // 공백을 제거 System.out.println(str); // 결과 : HelloWorld replaceAll() replaceAll()을 사용하게 되면 손쉽게 정규식을 사용하여 문자를 치환할 수 있게된다. (replace()도 정규식을 사용하는 방법이 있긴하다.) replaceAll("[바꾸고 싶은 문자의 정규식]", "치환할 문자"); 정규식 테이블 정..
[Java]제네릭 제네릭이란 클래스 또는 메소드에서 사용할 타입을 클래스 내부가 아닌 외부에서 선언하는 것. 즉, 클래스를 정의할 때 매개변수의 타입을 확정 짓지않고 해당 클래스의 객체를 생성할 때 매개변수의 데이터 타입을 지정해주게 된다. 제네릭 사용 이유 1. 객체를 생성할 때 데이터 타입을 정함으로서 클래스의 재사용성이 높아진다. 2. 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있다. 제네릭 사용 방법 기호를 사용하여 제네릭을 설정해 줄 수 있다. public class 클래스명 {...} public interface 인터페이스명 {...} 예시) * 제네릭을 사용하지 않은 클래스 및 객체 // Test 클래스 정의 public class Test { private String name; //..