Java
-
[Java] Optional<T> 와 OptionalIntJava 2022. 6. 20. 00:17
스트림을 통해 중간 연산 및 최종 연산을 할 경우 반환 타입이 Optional인 경우가 있다. Optional 는 지네릭 클래스로 T 타입 객체를 감싸는 래퍼클래스이다. Optional 객체에 값을 담아서 반환하는 이유는 반환된 결과가 null 인지 매번 체크하는 것 대신 Optional에 정의된 메서드를 통해 처리할 수 있기 때문이다. Optional 객체 생성하기 Optional 객체를 생성할 때에는 of() 또는 ofNullable() 메서드를 사용한다. ofNullable()의 경우 참조 변수의 값이 null 일 가능성이 있을 때 of() 대신 사용한다. (of() 메서드의 경우 매개변수 값이 null이면 NullPointException이 발생한다.) Optional 타입의 참조변수를 초기화 할..
-
[Java] 스트림(stream) - 중간 연산Java 2022. 6. 17. 20:56
스트림 자르기 - skip(), limit() 스트림 자르기는 스트림의 일부를 자를 때 사용한다. skip(n) 은 스트림이 가지는 요소들 중 n개를 건너 뛰는 것을 의미하고 limit(n) 은 스트림의 요소를 n개로 제한한다. 기본형 스트림에도 해당 메서드들이 정의 되어 있다. 스트림의 요소 걸러내기 - filter(), distinct() distinct() 는 스트림에서 중복된 요소들을 제거하고 filter()는 주어진 조건에 맞지 않는 요소를 걸러낸다. distinct()의 경우 중간연산으로 해당 메서드를 넣어주면 사용 가능하다. filter()의 경우 매개변수로 Predicate를 필요로하는데 연산결과가 boolean인 람다식을 넣어주면 된다. ex. filter(i -> i%2 == 0) fi..
-
[Java] 스트림(stream) - 스트림 만들기Java 2022. 6. 17. 02:31
컬렉션으로 스트림 만들기 Collection에 stream()이 정의 되어 있어서 List와 Set을 구현한 클래스들은 이 메서드로 스트림을 생성할 수 있다. List list = Arrays.asList(1, 2, 3, 4, 5); Stream intStream = list.stream(); 배열로 스트림 만들기 Stream과 Arrays에 static 메서드로 배열로 스트림을 생성하는 메서드가 정의되어 있다. // Stream Stream.of("a", "b", "C"); Stream.of(new String[]{"a", "b", "c"}); // Arrays Arrays.stream(new String[]{"a", "b", "c"}); Arrays.stream(new String[]{"a", "b"..
-
[Java] 스트림(stream) - 스트림이란?Java 2022. 6. 17. 01:16
스트림은 아래의 문제를 해결하기 위해서 만들어졌다. 1. 많은 데이터를 다루기 위해 배열, 컬력션을 for문과 Iterator를 이용해서 코드 작성 : 길고 알아보기 어려움, 재사용성 떨어짐 2. 데이터 소스마다 다른 방식으로 다뤄야함 : 각 컬렉션 클래스에 같은 기능의 메서드들이 중복 정의되어 있음 스트림은 데이터 소스를 추상화하고 데이터를 다루는데 자주 사용되는 메서드를 정의하였음 스트림의 특징 스트림은 데이터 소스를 변경하지 않는다. 데이터 소스로 데이터를 읽기만 할 뿐 변경하지 않는다. 스트림은 일회용이다. 한번 사용하면 닫혀서 다시 사용할 수 없기 때문에 필요하다면 다시 생성해야한다. 스트림은 작업을 내부반복으로 처리한다. 메서드 내부에 반복문을 숨길 수 있다. forEach() 는 스트림에 정..
-
[Java] SOLID원칙 - 객체 지향 설계의 원칙Java 2022. 6. 16. 04:50
객체 지향 프로그래밍 및 설계의 다섯가지 원칙을 의미하는 것이 바로 SOLID원칙이다. SOLID는 각각 아래의 원칙을 의미한다. 1. SRP : 단일 책임 원칙 2. OCP : 개방 - 폐쇄 원칙 3. LSP : 리스코프 치환 원칙 4. ISP : 인터페이스 분리 원칙 5. DIP : 의존관계 역전 원칙 위 원칙들은 유지보수와 확장이 쉬운 프로그램을 만들 때 적용할 수 있으며 소스코드를 읽기 쉽고 확장하기 쉬울 때까지 리팩터링 할 때의 지침이 된다. 1. SRP 단일 책임 원칙 - 한 클래스는 하나의 책임만 가져야한다. 클래스는 하나의 책임만 가지며 클래스는 그 책임을 완전히 캡슣화해야한다는 것을 의미하며 클래스가 제공하는 모든 기능은 이 책임과 주의 깊게 부합해야한다. 책임은 변경하려는 이유로 정의하..
-
[Java] 람다 - 람다식의 타입과 형변환, java.util.function 패키지Java 2022. 6. 15. 12:11
람다식의 타입과 형변환 함수형 인터페이스로 람다식을 참조할 수 있는 것일뿐 람다식의 타입이 함수형 인터페이스의 타입과 일치하는 것은 아니다 따라서 양변의 타입을 일치시키기 위해서는 형변환이 필요하다.(생략은 가능하다.) 하지만 Object 타입으로는 형변환이 불가능 하다. 람다식 내에서 참조하는 지역변수는 final이 붙지 않았어도 상수로 간주된다. 따라서 람다식 내에서 참조하고 있는 지역변수는 어떤 곳에서든 변수의 값이 변경되면 안된다. 단 외부의 값들은 상수로 간주되지 않으므로 값을 변경 가능하다. 또한 외부 지역변수와 같은 이름의 람다식 매개변수는 허용되지 않는다. java.util.function 패키지 해당 패키지에는 일반적으로 자주 쓰이는 형식의 메서드를 함수형 인터페이스로 미리 정의해놓았다...
-
[Java] 람다 - 람다식이란?, 람다식 작성방법Java 2022. 6. 15. 11:22
람다식이란 메서드를 하나의 식으로 표현한 것이다. 이때 메서드의 이름과 반환값이 없어지므로 익명 함수라고도 한다. 람다를 사용하면 메서드를 호출하기 위해 클래스를 만들고 객체를 생성하는 과정을 대신할 수 있다. 또한 메서드의 매개변수로 전달이 가능하고 메서드 결과로 반환 될 수 있다. 람다식 작성방법 람다식은 메서드에서 이름과 반환 타입을 제거하고 매개변수 선언부와 몸통 중괄호 사이에 -> 를 추가한다. void method(int num) { num += 1; } // 람다식으로 변경 (int num) -> { num += 1; } 반환 값이 있는 메서드의 경우 return문 대신에 식으로 대신할 수 있는데 식의 결과가 자동적으로 반환 값이 되고, 끝에 ;를 붙히지 않는다. int method(int ..
-
[Java] 쓰레드(Thread) - 쓰레드의 실행제어2(동기화)Java 2022. 6. 14. 18:58
멀티 쓰레드 프로세스의 경우 어려개의 쓰레드가 자원을 공유해서 작업하기 때문에 서로의 작업에 영향을 주게 된다. 각 쓰레드가 작업간 영향을 주어 의도하지 않는 결과를 얻게되는 일을 방지하기 위해 쓰레드가 특정 작업을 끝마치기 전까지 다른 쓰레드에 의해 방해받지 않도록 하는 것이 '임계 영역'과 '잠금(lock)'이다. 한 쓰레드가 진행 중인 작업을 다른 쓰레드가 간섭하지 못하도록 막는 것을 쓰레드의 동기화라고 한다. 1. synchronized를 이용한 동기화 이는 임계영역을 설정하는 방법이다. 메서드 앞에 synchronized를 붙이면 해당 메서드 전체가 임계영역으로 설정되는데 해당 메소드가 호출된 시점부터 해당 메서드가 포함된 객체의 lock을 얻어 작업을 수행하다 메서드가 종료되면 lock을 반환..