전체 글

전체 글

    Java Regular Expression(정규 표현식)

    Java Regular Expression(정규 표현식)

    🎯 목표 : 정규 표현식의 활용 이해 📒 Regular Expression 📌 특징 정규 표현식은 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용된다. 텍스트 편집기나 스크립트 언어에서 문자열의 검색과 치환을 위해 지원한다. java.util.regex 패키지의 클래스를 활용 하는데, 주로 Pattern 과 Matcher 클래스를 사용한다. 📌 Pattern 주요 메소드 Pattern 클래스 주요 메서드 compile(String regex) : 주어진 정규표현식으로부터 패턴을 만든다 matcher(CharSequence input) : 대상 문자열이 패턴과 일치할 경우 true를 반환. asPredicate() : 문자열을 일치시키는 데 사용할 수있는 술어를 작성. pattern() : 컴파일된 정..

    Java Stream의 최종 연산 collect()

    🎯 목표 : 스트림 최종 연산 메소드 collect()에 대한 이해 📒 collect() , Collector, Collectors 📌 특징 그룹별 리듀싱이 가능하다. 매개변수 타입으로 Collector가 필요하다. Collector을 구현한 클래스 Collectors 가 있다. Collectors 클래스의 static 메소드로 요소를 다양한 방법으로 수집할수 있다. 📌 Collectors 클래스 스트림을 컬렉션과 배열로 변환하는 메소드, 통계를 적용하여 요소를 수집할수 있는 메소드, 문자열을 결합 하거나 그룹화, 분할 할수 있는 메소드 등이 있다. 📌 컬렉션과 배열로 변환 toList(), toSet(), toMap(), toCollection(), ToArray() List names = stuStr..

    Java Stream의 최종 연산

    🎯 목표 : 스트림의 최종연산 메소드별 활용 방법에 대한 이해 📒 Stream 최종 연산 📌 forEach() 요소를 소모하는 최종 연산 반환 타입은 void 이며, 요소를 출력하는 용도로 사용한다. 📌 allMatch(), anyMatch(), noneMatch(), findFirst(), findAny() 조건을 검사하는 메소드다. allMatch 는 모든요소가 조건에 모두 부합 할때 true , anyMatch는 하나의 요소라도 조건에 부합하면 true , noneMatch()는 모든 요소가 조건에 부합하지 않을때 true를 반환한다. findFirst와 findAny는 일반적으로 fiter()와 함께 사용되는데 findFirst는 필터의 조건과 부합한 첫번째 요소를 Optional 객체로 반환하며..

    Java Stream Optional<T>

    🎯 목표 : 래퍼 클래스 Optional 의 필요성과 활용 이해 📒 Optional 📌 특징 T타입의 객체를 감싸고 있는 래퍼 클래스다. 모든 타입의 참조변수를 담을수 있다. 최종 연산의 결과를 Optional에 담아서 반환하게 되면, 결과가 null인지 if문으로 확인 할 필요가 없으며, Optional의 메소드로 간단하게 확인 할수 있다. NullPointerException을 사전에 방지 할수 있음. 📌 예제 public class StreamOptionalStudy { public static void main(String[] args) { Optional optStr = Optional.of("abcde"); Optional optInt = optStr.map(String::length); Sy..

    Java Stream의 중간 연산

    Java Stream의 중간 연산

    🎯 목표 : 스트림의 중간연산 메소드 활용에 대한 이해 📒 Stream 의 중간 연산 📌 skip() , limit() - 스트림 자르기 skip(long n) 은 n개의 요소를 자르고 n+1번째 요소부터 스트림이 반환된다. limit(long n) 은 요소중 n개의 길이 만큼 잘라서 스트림으로 반환 한다. 📌 filter() , distinct() - 스트림 요소 걸러내기 filter() 는 Predicate를 매개변수로 사용할수 있는데 연산결과가 boolean타입인 람다식 활용도 가능하다. distinct() 는 스트림에서 중복된 요소들을 제거한다. int [] arr2 = {2,6,3,5,7,2,6,8,10,12}; IntStream intstream =Arrays.stream(arr2); // 기..

    Java Stream

    🎯 목표 : Stream의 개념 과 활용 이해 📒 Stream 📌 특징 다양한 데이터 소스를 표준화 된 방법으로 다루기 위한 것. 데이터 소스를 추상화하고, 자주 사용하는 메소드가 정의되어 있음, 데이터 소스가 무엇이던 간에 같은 방식으로 다룰수 있다. 코드의 재 사용성이 높아진다. 데이터 소스로 부터 데이터를 읽기만 하고 변경하지 않는다. 지연된 연산을 한다. 스트림의 작업은 내부 반복으로 처리된다.- 반복문을 메소드의 내부에 숨길수 있기 때문에 코드가 간결해진다. for(String str : strList) System.out.println(str); stream.forEach(System.out::println); // 위와 동일한 코드 // 내부 반복으로 작업을 하기 때문에 스트림의 모든 요소에..

    Java Interface의 다형성_OOP_추상화_02

    🎯 목표 : 기존 작성했던 Interface의 내용을 복기하며, 조금더 간단히 정리. 📒 Interface 📌 특징 추상 메소드의 집합이다. public , abstruct 를 생략할수 있다. 다중 상속이 가능하다 매개변수의 타입으로 정의 가능하다. 📌 예제 인터페이스 Calculable와 Printable 이 선언 되어 있다. RealCal 클래스를 상속받은 MyCal 클래스가 있다. package InterfaceStudy; interface Calculable { // 클래스의 형태를 규정 static final double PI = 3.14; // 변수를 정의할수 있다. static과 final은 생략가능 static void method () { // static 메소드는 가능하다 System...

    Java Lambda Expression(람다식)_02

    🎯 목표 : - Function의 합성과 Predicate의 결합으로 람다식의 활용 이해 - 메소드 참조의 이해 📒 Function의 합성, Predicate의 결합 📌 Function 합성 두 람다식을 합성해서 새로운 람다식을 만들수 있다. andThen()를 일반적으로 사용하며, 두 함수를 하나의 함수로 만들때 사용된다 아래 예제는 문자열을 16진수로 변환하는 람다식의 함수, 10진수를 2진수로 변환하는 람다식 함수를 하나의 함수로 만드는 예제다. // 16 진수로 변환 Function f = (s) -> Integer.parseInt(s, 16); // 2 진수로 변환 Function g = (i) -> Integer.toBinaryString(i); Function h = f.andThen(g);..

    Java Lambda Expression(람다식)_01

    🎯 목표 : 람다식의 구현과 활용의 이해 📒 Lambda 📌 특징 메소드(함수)를 간단한 식으로 표현하는 방법이다. 이름이 없는 익명 객체다. 함수는 클래스에 독립적이고, 메소드는 클래스에 종속적이다. 함수형 인터페이스를 통하여 람다식을 다룰수 있다. 📌 구현 int max(int a, int b){ return a>b ? a:b; } (a,b) -> a>b ? a:b; // 위 메소드와 같은 동작을 한다 위와 같이 max 메소드와 동일한 작업을 람다식으로 간단하게 구현할수 있다. 하지만, 호출을 하기위해서는 참조변수가 필요한데, 참조변수로 람다식을 다루기 위해서는 함수형 인터페이스를 선언 해야된다. 함수형 인터페이스는 단 하나의 추상메서드만 선언 할수 있는 제약이 있다. public class Lamb..

    Java Thread_03

    🎯 목표 : Thread의 동기화의 개념과 관련된 메소드의 활용 📒 Thread의 동기화 진행중인 작업을 다른 쓰레드가 간섭하지 못하게 막는것. 멀티쓰레드 프로세스에서 다른 쓰레드의 작업에 영향을 미칠수가 있으며, 진행중인 작업이 다른 쓰레드에게 간섭받지 않게 하려면 동기화가 필요하다. 동기화를 하려면 간섭받지 않아야 하는 문장들을 임계영역으로 설정하고 임계영역은 락을 얻은 단 하나의 쓰레드만 출입 가능하다(객체 1개마다 1개의 락을 가지고 있다.) 📌 synchronized public synchronized void sum() { // 임계영역 } synchronized(객체의 참조변수) { //임계영역 } 위 코드와 같이 두가지 방법으로 임계영역을 설정할수 있다. 아래 예제는 잔고에서 출금하는 것을..

    Java Thread_02

    Java Thread_02

    🎯 목표 : 쓰레드의 활용 이해 📒 Thread 📌 Thread의 우선순위 작업의 중요도에 따라 쓰레드의 우선순위를 다르게 하여 특정 쓰레드가 더 많은 작업시간을 갖게 할수있다. 우선순위를 정의하게 되면, 쓰레드를 생성한 쓰레드로 부터 상속받는다. main 메소드를 동작하게 하는 쓰레드는 기본 우선순위가 5이며, main 메소드 내에서 생성한 쓰레드는 모두 기본값 5를 가지고 동작한다. 정의한 우선순위보다 OS 스케쥴러의 우선순위가 더 우선되기 때문에 정확하지 않다. 📌 Thread 그룹 서로 관련된 쓰레드를 그룹으로 묶어서 다룬다 모든 쓰레드는 반드시 하나의 쓰레드 그룹에 포함되어 있다. 쓰레드 그룹을 지정하지 않으면 main 쓰레드 그룹에 속하게 된다. 자신이 생성한 쓰레드(부모 쓰레드)의 그룹과 우..