1. 제네릭(Generic) 자바에서 제네릭(generic)이란 데이터의 타입을 일반화한다는 것을 의미한다. 제네릭은 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시 미리 지정하는 방법이다. 타입이 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것이며, 특정 타입을 미리 지정해주는 것이 아닌 필요에 의해 지정할 수 있도록 하는 타입이다. 미리 타입 검사 시 장점 클래스나 메소드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있다. 타입체크와 형변환을 생략하므로 코드가 간결하다. 1-1. Generic 선언 및 생성 class MyArray { T element; void setElement(T element) { this.element = element; } T getEl..
IT/Java
정규 표현식(Regular Expression) 정규 표현식 혹은 정규식 은 특정 문자열의 규칙을 가지는 문자열의 집합을 표현하는 데 사용되는 언어를 의미한다. 1. 정규 표현식 패턴(Regular Expression Pattern) 표현 및 기호 설명 [] 한 개의 문자 [abc] a, b, c 중 하나의 문자 [^abc] a, b, c 이외의 하나의 문자 [a-zA-Z] a~z, A~Z 중 하나의 문자 \d 한 개의 숫자, [0-9]와 동일 \s 공백 \w 한 개의 알파벳 또는 한 개의 숫자, [a-zA-Z_0-9]와 동일 \. . . 모든 문자 중 한 개의 문자 ? 없음 또는 한 개 * 없음 또는 한 개 이상 + 한 개 이상 {n} 정확히 n개 {n.} 최소한 n개 {n.m} n개부터 m개까지 a ..
포장 클래스(Wrapper Class) 기본 타입의 데이터를 먼저 객체로 변환 후 작업을 수행해야 하는 상황이 생겼을 때 기본 타입에 해당하는 데이터를 객체로 포장해주는 클래스다. 포장 클래스는 각각의 타입에 해당하는 데이터를 인수로 전달받아, 해당 값을 가지는 객체로 만든다. 포장 객체는 포장하고 있는 기본 타입의 값을 변경할 수 없다. Integer obj = 100; // Boxing int value = obj; // UnBoxing Boxing 기본 타입의 값을 포장 객체로 만드는 과정 포장 클래스 변수에 기본 타입 값이 대입될 때 발생 UnBoxing 포장 객체에서 기본 타입의 값을 얻어내는 과정 기본 타입 변수에 포장 객체가 대입될 때 발생 예제 코드 1 더보기 package ch12.sec..
java.base 모든 모듈이 의존하는 기본 모듈로, 모듈 중 유일하게 requires 하지 않아도 사용 가능하다. 패키지 용도 java.lang 자바 언어의 기본 클래스를 제공 java.util 자료 구조와 관련된 컬렉션 클래스 제공 java.text 날짜 및 숫자를 원하는 형태의 문자열로 만들어 주는 포맷 클래스 제공 java.time 날짜 및 시간을 조작하거나 연산하는 클래스 제공 java.io 입출력 스트림 클래스를 제공 java.net 네트워크 통신과 관련된 클래스를 제공 java.nio 데이터 저장을 위한 Buffer 및 새로운 입출력 클래스 제공 java.lang 패키지에 포함된 클래스 클래스 용도 Object - 자바 클래스의 최상위 클래스로 사용 System - 키보드로부터 데이터를 입력..
메소드 참조(Method Reference) 람다 표현식이 단 하나의 메소드만 호출하는 경우 메소드를 참조하여 매개변수의 정보 및 리턴 타입을 알아내 람다식에서 불필요한 매개변수를 제거하고 사용하게 한다. (x, y) -> Class.method(x, y); Class :: method; 메소드 참조를 사용하면 불필요한 매개변수를 제거하고 '::' 기호를 사용하여 표현한다. 1. 정적 메소드 참조 클래스 :: 메소드 package ch16.sec00; public class StaticMethodReferenceExample { public static void main(String[] args) { SMRInterface smrInterface = StaticMethodReferenceExample::..
1. 매개 변수가 없는 람다식 실행문이 두 개 이상일 경우 중괄호를 생략할 수 없고, 하나일 경우에만 생략할 수 있다. 2. 매개 변수가 있는 람다식 매개변수 선언 시 타입은 생략할 수있고 타입 대신에 var를 사용할 수도 있다. 매개변수가 하나일 경우에는 중괄호를 생략할 수 있지만 이때는 타입 또는 var를 붙일 수없다. 3. 리턴값이 있는 람다식 return 문 하나만 있을 경우 중괄호와 함께 return 키워드는 생략 가능하다. 리턴값은 연산식 또는 리턴값 있는 메소드 호출로 대체 가능하다. 예제 코드 매개변수가 2개 이상 있고 리턴이 없는 추상 메소드 더보기 public class Lambda04 { public static void main(String[] args) { /* 1번 */ MyIn..
람다식(Lambda Expressions) 추상 메소드가 하나인 인터페이스의 익명 클래스의 객체 생성코드를 간단히 표현한다. 데이터 처리부에 제공되는 함수 역할을 하는 매개변수를 가진 중괄호이다. 메소드를 하나의 식(expression)으로 표현하여 간략하게 표현 가능하다. 메소드의 이름과 반환값이 없어져 익명 함수(Anonymous function)라고도 한다. 람다식 자체만으로 메소드의 역할을 대신 하고, 메소드의 매개변수로 전달도 가능하며, 메소드의 결과로 반환도 가능하다. 람다식으로 메소드를 변수처럼 다루는 것이 가능하다. 람다식: (매개변수, ...) -> { 처리 내용 } 매개변수 화살표(->) 함수 몸체로 이용하여 사용한다. 함수 몸체가 단일 실행문이면 중괄호{} 생략이 가능하다. 함수 몸체..
익명(anonymous) 객체 이름이 없는 객체를 말하며, 프로그램에서 일시적으로 한 번만 사용되고 버려져 재사용이 되지 않는 객체이다. 하나의 코드로 여러 인스턴스를 만들 필요 없을 때 사용한다. 클래스의 선언과 객체 생성을 동시에 한다. 명시적으로 클래스를 선언하지 않으나 단독으로 생성할 수 없으며, 클래스를 상속하거나 인터페이스를 구현해야 생성 가능하다. 익명 객체는 필드값, 로컬 변수값, 매개변수값을 주로 사용된다. UI 이벤트 처리 객체나 스레드 객체를 간편하게 생성할 목적으로 많이 활용된다. 내부 클래스의 일종으로 외부의 지역 변수 이용할 때 똑같이 내부 클래스의 제약을 받는다. 내부 클래스에서 가져올 수 있는 변수는 final 상수만 사용 가능하다. 클래스를 상속해서 만들 경우 익명 자식 객..
중첩 인터페이스 class A { /* 중첩 인터페이스 */ [public | private] [static] interface B { // 상수 필드 // 추상 메소드 // 디폴트 메소드 // 정적 메소드 } } 중첩 인터페이스는 클래스의 멤버로 선언된 인터페이스를 말한다. UI 프로그래밍에서 이벤트 처리 목적으로 많이 활용된다. 중첩 인터페이스는 기본적으로 정적(static)이라 키워드를 명시할 필요가 없다. 인터페이스 내부에 선언된 중첩 인터페이는 public 한정자만 사용 가능하여 암시적으로 public이다. 도트(.) 연산자를 사용하여 중첩된 인터페이스에 접근한다. 중첩된 인터페이스는 클래스 또는 인터페이스를 그룹화하는 목적으로 사용된다.
중첩 클래스(Nested Class) 클래스 내부에 선언한 클래스로 클래스 안에 또 다른 클래스가 정의된 것이다. 관련 있는 것을 하나로 묶고 싶을 때 사용한다. 특정 클래스를 자신의 클래스 내부적인 용도로만 사용하고자 할 때 효율적이다. 두 클래스의 멤버들을 서로 쉽게 접근할 수 있다. 외부에 불 필요한 관계 클래스를 감추어 코드의 복잡성을 줄일 수 있다. 클래스의 멤버로 선언되는 중첩 클래스는 멤버 클래스이며, 메소드 내부에 선언되는 중첩 클래스를 로컬 클래스라 한다. 선언 위치에 따른 분류 선언 위치 객체 생성 조건 멤버 클래스 인스턴스 멤버 클래스 class A { class B {...} } A 객체를 생성해야 B 객체를 생성할 수 있다. 정적 멤버 클래스 class A { static clas..