Java

CS

[Java] Stream API

자바 컬렉션이나 배열의 원소를 가공할 때 for, foreach로 가공해서 사용 > 귀찮음 자바 8부터 Stream을 사용해서 람다함수 형식으로 간결하게 요소를 처리할 수 있다. Stream API로 요소를 가공 후 collect 함수를 사용해 결과를 리턴 받는다. [배열 원소 가공 방법] map : 스트림 내 요소들에 대해 함수를 적용 > 결과 반환 (새로운 값으로 매핑) filter : 스트림 내 요소들을 조건에 따라 필터링 sorted : 스트림 내 요소들을 정렬 map() List humanNames = humans.stream().map(h -> h.getName()) .collect(Collectors.toList()); // 매핑 결과 > 리스트로 반환 // 결과 출력 for (String ..

CS

[Java] 문자 -> 문자열 변환하기, 문자열 내 특정 문자 제거하기 replaceAll()

문자 → 문자열 변환 방법 String.valueOf(char) 사용 Character.toString(char) 사용 문자열 연결 + "" package backjoon; public class Test { public static void main(String[] args) { char a = 'A'; System.out.println(String.valueOf(a)); // A System.out.println(Character.toString(a)); // A System.out.println(a + ""); // A } } 문자열 내 특정 문자 제거하기 replaceAll() replaceAll()과 regrex 패턴을 활용해서 특정 문자를 제외하거나, 남길 수 있음 영문 빼고 전부 제거 Str..

CS

[Java] StringBuilder

String 불변 객체 > 한번 생성되면 변경 X + 로 문자열 연결 시 새로운 문자열 객체가 생김, 기존 문자열 객체는 JVM가 Garbage collection 수행 따라서, String 객체를 더하는 연산이 많아지면 메모리 할당 & 해제가 발생해 성능에 좋지 않음 StringBuilder mutable > 값이 변할 수 있음 문자열 더하기 수행 시 새로운 객체를 생성하는 게 아닌, 기존 데이터에 더하는 방식 속도 빠름, 상대적으로 부하가 적음 [ 정리 ] 긴 문자열을 더하는 상황이 발생할 경우 StringBuffer, StringBuilder 사용하기 문자열 변경이 빈번하지 않음 > String 문자열이 빈번하게 변경, 멀티 쓰레드 환경 O > StringBuffer 문자열이 빈번하게 변경, 멀티 ..

CS

[Java] EOF까지 입력 받기

알고리즘 문제에서 "입력이 끝날 때까지 입력받기", "0이 입력될 때까지 입력받기"가 필요한 경우 BufferedReader 사용할 때, != 사용 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = ""; while( (str = br.readLine()) != null) { ... } .equals() 사용 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = ""; while( !(str = br.readLine()).equals("")) { ... }

CS

[Java] BufferedReader, BufferedWriter 사용하기

참고: 빠른 입출력을 위한 BufferedReader, BufferedWriter, StringTokenizer, StringBuilder BufferedReader readLine() : 입력값으로 데이터를 한 줄로 읽음 -> String으로 반환 close() : 스트림을 닫는다. 반드시 예외 처리를 해야한다 public class Main { public static void main(String[] args) throws IOException { // BufferedReader를 사용하기 위해서는 throws IOException을 해 주어야 함. BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 선언 int ..

CS/Backend

[Java] 직렬화, 역직렬화

참고: Serialization and Deserialization in Java with Example Java에서 입출력 시 스트림을 이용하는데, 스트림에서는 바이트 형태로 데이터를 전송한다. → 따라서 자바 객체를 바이트 배열로 변환하는 직렬화, 바이트 배열에서 객체로 변환하는 역직렬화를 사용한다. 직렬화 (Serialization) 객체를 바이트 스트림으로 변환하는 메커니즘 객체의 상태를 네트워크를 통해 전송이 가능해짐 직렬화된 바이트 스트림은 플랫폼에 독립적 > 다른 플랫폼에서 역직렬화 가능 java.io.Serializable 인터페이스를 구현하거나 Serializable 인터페이스를 구현한 클래스를 상속받은 클래스의 객체만 직렬화할 수 있다. Serializable 은 마커 인터페이스 마커 ..

CS/Backend

[JAVA] 예외 처리

참고: http://www.tcpschool.com/java/java_exception_intro Exception 클래스 오류 (error) : 시스템 레벨에서 발생하는 심각한 수준의 오류로, 실행 중인 프로그램을 종료 시킴 > 미리 예측 불가능, 처리가 불가능 예외 (exception) : 개발자가 구현한 로직에서 발생하는 문제, 발생 상황을 미리 예측해서 예방할 수 있다. > 처리 가능 모든 예외 클래스는 Throwable 클래스를 상속받는다. Throwable을 상속받는 클래스 Error Exception Exception 클래스 자바에서 발생하는 모든 예외의 조상 클래스 RuntimeException와 그 하위 클래스들 = UncheckedException 클래스 그 외 Exception의 자식..

CS/Backend

[Java] Generic, 제네릭

제네릭, Generic 데이터 타입을 일반화(generalize)한다. 클래스나 메서드에서 사용할 데이터 타입을 컴파일 시에 미리 지정하는 방법 장점: 타입 안전성: 컴파일 시점에 타입 체크를 수행해서 런타임 오류 방지 > 에러를 미연에 방지 재사용성: 일반화된 타입 > 여러 종류의 객체를 처리할 수 있다. 가독성: 타입 정보가 미리 명시되어 코드를 이해하기 쉽다. 코드 의도가 명확 > 가독성이 좋아진다. 컴파일 시에 미리 타입이 지정되므로, 타입 검사나 타입 변환과 같은 추가 작업을 생략할 수 있다. 제네릭 타입 클래스나 인터페이스를 선언할 때 타입 매개변수 T를 사용해서 일반화 타입을 지정한다. T : 타입 변수, 일반화 타입 (wrapper 클래스이면 어떤 타입이든 받을 수 있음) 클래스를 제네릭 ..

CS/Backend

[Java] 추상 클래스, 인터페이스

추상 클래스 추상 클래스를 상속하는 일반 클래스는 반드시 추상 메서드를 구현해야 한다 > 확장 ⭐ 하나의 클래스는 추상 클래스와 동시에 인터페이스를 상속 받을 수 있다. ex) Animal.java public abstract class Animal { public abstract void makeSound(); public void eat() { System.out.println("eat....done"); } } Dog.java public class Dog extends Animal { @Override public void makeSound() { System.out.println("makeSound....done"); } } Main.java public class Main { public st..

yooja_tea
'Java' 태그의 글 목록