![[Java] 람다 표현식과 함수 인터페이스](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbq718o%2FbtsKzqAQ19h%2FohEkgGooyinYETmIGK6qL0%2Fimg.webp)
람다란 무엇인가?람다 표현식은 익명 클래스처럼 클래스의 이름이 없고 메서드를 인수로 전달할 수 있으므로 익명 클래스와 유사하다익명: 이름이 없기때문에 익명의 특징을 갖는다함수: 메서드처럼 특정 클래스에 종속된것이 아니기때문에 함수라고 부른다. 하지만 메서드처럼 파라미터, 바디, 반환형식, 가능한 예외 리스트를 포함한다전달: 람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다간결성: 익명 클래스처럼 많은 자질구레한 코드를 구현할 필요가 없다Comparator byWieght = new Comparator() { public int compare(Apple a1, Apple a2) { return a1.getWeight().compareTo(a2.getWeight());..
![[JAVA] 예외 계층](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3DqoE%2FbtsIrdDE7TN%2FY5KKQkBbRxlfEEOkaqjmA0%2Fimg.png)
Throwable: 최상이 예외Error: 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구가 불가능한 시스템 예외Exception애플리케이션 로직에서 사용할 수 있는 실질적인 최상위 예외Exception과 그 하위 예외는 모두 컴파일러가 체크하는 체크 예외이다. 단 RuntimeException은 예외RuntimeException: 언체크 예외, 런타임 에외컴파일러가 체크하지 않는 언체크 예외RuntimeException과 그 자식 에외는 모두 언체크 예외이다사용자 정의 예외 계층예외 계층화의 장점부모의 예외를 잡거나 던지면 자식 예외도 함께 잡거나 던질 수 있다특정 예외를 잡아서 처리하고 싶다면 하위예외를 잡아서 따로 처리하면 된다사용자정의 최상위 예외public class Networ..
![[JAVA] 자바의 정렬 인터페이스 Comparable과 Comparator](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F82ETj%2FbtsIokhcnV1%2FH03XNj5qswYrQkiumORvPk%2Fimg.png)
자바에서 배열에 대해 정렬을 하고싶다면 어떻게해야할까?코드를 통해 살펴보자import java.util.Arrays; public class SortMain1 { public static void main(String[] args) { Integer[] array = {3, 2, 1}; System.out.println(Arrays.toString(array)); System.out.println("기본 정렬 후"); Arrays.sort(array); System.out.println(Arrays.toString(array)); } }실행결과[3, 2, 1]기본 정렬 후[1, 2, 3]util패키지의 ..
import java.util.Arrays; public class HashStart1 { public static void main(String[] args) { Integer[] inputArray = new Integer[4]; inputArray[0] = 1; inputArray[1] = 2; inputArray[2] = 5; inputArray[3] = 8; System.out.println(Arrays.toString(inputArray)); int searchValue = 8; for (int inputValue : inputArray) { ..
![[JAVA - 자료구조] HashSet](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrkvNE%2FbtsIf0EsoLo%2Fv4xUagpbWrqVqrfFjDGKT0%2Fimg.png)
이제 Set컬렉션에 해시알고리즘을 적용하여 Set보다 훨씬 성능이 좋은 HashSet을 구현해보자먼저 HashSet에서는 해시 알고리즘을 활용할 인덱스를 갖는 배열과 그 각각의 배열안에 해시 코드값이 같은 데이터를 저장하기위한 LinkedList로 구현된다.필드영역static final int DEFAULT_INITIAL_CAPACITY = 16; LinkedList[] buckets; private int size = 0; private int capacity = DEFAULT_INITIAL_CAPACITY;DEFAULT_INITIAL_CAPACITY: 해시 인덱스가 적용될 배열의 기본 길이를 설정하기위한 상수LinkedList[] buckets: 해시인덱스가 적용될 배열private int si..
기본형: 하나의 값을 여러 변수에서 절대로 공유하지 않는다참조형: 하나의 객체를 참조값을 통해 여러 변수에서 공유할 수 있다참조형 변수는 참조값을 복사해서 대입하기때문에 여러변수에서 얼마든지 같은 객체를 공유할 수 있다.객체의 공유는 필요할 때도 있지만 때로는 객체의 공유로 인하여 사이드 이펙트를 만드는 경우도있다.Ex)예상치 않은 참조로 인해서 기존의 참조변수의 값이 변경되어 사이드이펙트가 발생되는경우Address addressA = new Address(); Address b = addressA;위 코드가 객체의 공유를 의미하며 객체의 공유는 아래와 같은 사이드 이펙트를 유발할 수 있다.public static void main(String[] args) { Address addressA ..
![[JAVA] 래퍼 클래스](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDssbR%2FbtsIbp3Rdqn%2FQsikmpDQ6Odtgu9pcP2OkK%2Fimg.png)
기본형의 한계객체가 아니기때문에 메서드를 제공할 수 없다null값을 가질 수 없다래퍼 클래스 생성 - 박싱기본형을 래퍼클래스로 변경하는 것을 박싱이라고 한다Integer.valueOf(10)을 하면 Integer객체에 들어있는 값을 꺼낼 수 있다.Integer.valueOf()에는 성능최적화가 되어있는데 String pool과 같이 -128~127범위의 숫자는 pool에 미리 생성해두고 가져와서 사용한다.때문에 아래와 같은 실행결과를 얻는다public static void main(String[] args) { Integer i1 = Integer.valueOf(127); Integer i2 = Integer.valueOf(127); System.out.println(i1 ==..
![[Java] Enum타입](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv9aGM%2FbtsH3Phmqs5%2FWTv2SCodTwPSzHkudZkBpK%2Fimg.png)
열거형을 배우기 이전에 왜 열거형이 나오게 되었고, 열거형이 아닌 문자열을 사용했을 때, 상수를 사용했을때와의 차이를 알아보자 문자열로 구현먼저 회원등급별로 할인을 적용하는 메서드를 짤 때 문자열로 회원의 등급을 구분해보자public int discountPrice(String grade, int price) { int ratio = 0; if (grade.equals("SILVER")){ ratio = 10; } else if (grade.equals("GOLD")) { ratio = 20; } else if (grade.equals("DIAMOND")) { ratio = 30; } else { ..