목록프로그래밍👩🏻💻/Java (11)
suyeonme
문자열을 다루는 대표적인 클래스로 String, StringBuffer, StringBuilder가 있다. String 클래스는 불변성(immutable)을 가지고, StringBuffer, StringBuilder는 가변성(mmutable)을 가진다. String 불변성(immutable)을 가지므로 변하지 않는 문자열을 저장하는데 적합하다. thread-safe하므로 멀티 스레드 환경에서 사용하기 적합하다. String str = "I am a"; str = str + "developer"; // I am a developer 위 예시의 경우, str 변수의 "I am a" 값을 할당받은 메모리는 GC(Garbage Collection)되고, "I am a developer" 값을 할당받은 새로운 메..
Error는 시스템에 비정상적인 상황이 발생하여 프로그램에 심각한 영향을 끼치는 경우에 발생한다. 개발자는 이러한 종류의 에러를 예측하기 쉽지 않다. OutofMemoryError, StackOverflowError등 Exception은 개발자의 실수로인해 야기되는 경우에 발생한다. NullPointerException, IndexOutofBoundsException, FileNotFoundException등 Exception은 아래와같이 총 2가지로 나뉜다. CheckedException UnCheckedException CheckedException UnCheckedException 발생 시점 Compile Runtime 처리 여부 반드시 try/catch로 예외를 처리해야함 반드시 예외를 처리하지않..
Optional 클래스란? 자바 8에서 제공하는 java.util.Optional클래스로, Optional은 선택형값을 캡슐화하는 클래스이다. 값이 있으면 Optional 클래스는 값을 감싸고 값이 없으면 Optional.empty 메서드로 Optional 값을 반환한다. null을 참조하려 하면 NullPointerException이 발생하지만 Optional.empty는 Optional 객체이므로 이를 다양한 방식으로 핸들링 할 수 있다. NullPointerException을 방지하기 위한 null 확인 코드 null을 참조하려하면 런타임에 NullPointerException이 발생한다. NullPointerException을 방지하기 위해서 아래와 같이 null 확인 코드를 작성한다. 아래와 같..
메서드 참조(Method Reference)란? 메서드 참조는 특정 메서드만을 호출하는 람다의 축약형이다. 메서드명 앞에 ::를 붙여서 메서드 참조를 활용한다. 메소드 참조를 이용하여 하나의 메서드를 참조하는 람다를 간결하고 편리하게 표현할 수 있으며 명시적으로 메서드명을 참조함으로써 가독성을 높일수 있다. // 기존 코드 inventory.sort((Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWegith())); // 메서드 참조를 이용(위와 동일) inventory.sort(comparing(Apple::getWeight)) 메서드 참조는 아래와 같이 다양하게 사용할 수 있다. 1) 정적 메서드 참조 (Integer n) -> n.parseInt(..
모던 자바 인 액션(Modern Java in Action)을 읽고 정리한 내용입니다. 람다 표현식(Lamda Expression)이란? 람다식은 자바에서 제공하는 함수형 프로그래밍 방식이다. 람다는 익명 함수(anonymous function)로, 함수를 일급값으로 넘기는 프로그램을 구현하는 것이다. 함수형 인터페이스를 구현하여 람다식을 사용한다. 람다식은 아래와 같은 특징이 있다. 변수에 할당할 수 있다. 함수형 인터페이스를 인수로 받는 메서드로 전달할 수 있다. 함수형 인터페이스의 추상 메서드와 같은 시그니처를 갖는다. 람다식 문법 () -> expression // expression style () -> { statements; } // block style () -> "Suyeon" () ->..
boxing, Unboxing이란? boxing이란, 기본형 타입(primitive type)을 wrapper type으로 변환하는 것을 말한다. int -> Integer long -> Long boolean -> Boolean unboxing이란, wrapper type을 기본형 타입(primitive type)으로 변환하는 것을 말한다. Integer -> int Long -> long Boolean -> boolean Wrapper Class 자바의 자료형은 기본형(primitive type)과 참조형(reference type)으로 나뉜다. 기본형의 데이터를 객체로 표현해야 하는 경우, wrapper class를 사용하여 기본형을 객체로 다룰 수 있다. 즉 Wrapper class는 boxing..
Servlet이란? 클라이언트의 요청(request)을 처리하고 응답(response)을 반환하는 Servlet 클래스를 따라는 자바 프로그램이다. Servlet 특징 HttpServletRequest로 HTTP 요청을 쉽게 다룰 수 있다. (query string, 메세지 바디 조회등) HttpServletResponse로 HTTP 응답을 쉽게 다룰 수 있다. (status code, content-type, cookie, redirect등) 개발자는 서블릿을 사용하여 HTTP를 쉽게 핸들링할 수 있다. Servlet 예시 코드 @WebServlet(name = "requestParamServlet", urlPatterns = "/request-param") public class RequestServ..
BufferedReader/BufferedWriter란? BufferedReader/BufferedWriter는 버퍼(buffer)를 사용하여 읽기/쓰기를 하는 함수로, 입력된 데이터를 바로 전달하지 않고 버퍼에 저장해두었다가 한번에 전달한다. 외부 장치와 데이터 입출력시, 입출력시마다 데이터를 이동시키는 것보다 메모리 버퍼에 데이터를 저장하고 묶어서 한번에 이동시키는 것이 더 효율적이다. Scanner vs BufferedReader Scanner space, enter를 경계로 입력값을 인식 데이터를 따로 가공하지않아도 된다. BufferedReader enter만 경계로 입력값을 인식 데이터가 String으로 고정되어 추가적인 가공(데이터를 구분하여 나누는)이 필요하다. 데이터의 양이 많은 경우, ..