전체 글

· IT/Java
메소드 참조(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::..
· IT/Java
1. 매개 변수가 없는 람다식 실행문이 두 개 이상일 경우 중괄호를 생략할 수 없고, 하나일 경우에만 생략할 수 있다. 2. 매개 변수가 있는 람다식 매개변수 선언 시 타입은 생략할 수있고 타입 대신에 var를 사용할 수도 있다. 매개변수가 하나일 경우에는 중괄호를 생략할 수 있지만 이때는 타입 또는 var를 붙일 수없다. 3. 리턴값이 있는 람다식 return 문 하나만 있을 경우 중괄호와 함께 return 키워드는 생략 가능하다. 리턴값은 연산식 또는 리턴값 있는 메소드 호출로 대체 가능하다. 예제 코드 매개변수가 2개 이상 있고 리턴이 없는 추상 메소드 더보기 public class Lambda04 { public static void main(String[] args) { /* 1번 */ MyIn..
· IT/Java
람다식(Lambda Expressions) 추상 메소드가 하나인 인터페이스의 익명 클래스의 객체 생성코드를 간단히 표현한다. 데이터 처리부에 제공되는 함수 역할을 하는 매개변수를 가진 중괄호이다. 메소드를 하나의 식(expression)으로 표현하여 간략하게 표현 가능하다. 메소드의 이름과 반환값이 없어져 익명 함수(Anonymous function)라고도 한다. 람다식 자체만으로 메소드의 역할을 대신 하고, 메소드의 매개변수로 전달도 가능하며, 메소드의 결과로 반환도 가능하다. 람다식으로 메소드를 변수처럼 다루는 것이 가능하다. 람다식: (매개변수, ...) -> { 처리 내용 } 매개변수 화살표(->) 함수 몸체로 이용하여 사용한다. 함수 몸체가 단일 실행문이면 중괄호{} 생략이 가능하다. 함수 몸체..
· IT/Java
익명(anonymous) 객체 이름이 없는 객체를 말하며, 프로그램에서 일시적으로 한 번만 사용되고 버려져 재사용이 되지 않는 객체이다. 하나의 코드로 여러 인스턴스를 만들 필요 없을 때 사용한다. 클래스의 선언과 객체 생성을 동시에 한다. 명시적으로 클래스를 선언하지 않으나 단독으로 생성할 수 없으며, 클래스를 상속하거나 인터페이스를 구현해야 생성 가능하다. 익명 객체는 필드값, 로컬 변수값, 매개변수값을 주로 사용된다. UI 이벤트 처리 객체나 스레드 객체를 간편하게 생성할 목적으로 많이 활용된다. 내부 클래스의 일종으로 외부의 지역 변수 이용할 때 똑같이 내부 클래스의 제약을 받는다. 내부 클래스에서 가져올 수 있는 변수는 final 상수만 사용 가능하다. 클래스를 상속해서 만들 경우 익명 자식 객..
· IT/Java
중첩 인터페이스 class A { /* 중첩 인터페이스 */ [public | private] [static] interface B { // 상수 필드 // 추상 메소드 // 디폴트 메소드 // 정적 메소드 } } 중첩 인터페이스는 클래스의 멤버로 선언된 인터페이스를 말한다. UI 프로그래밍에서 이벤트 처리 목적으로 많이 활용된다. 중첩 인터페이스는 기본적으로 정적(static)이라 키워드를 명시할 필요가 없다. 인터페이스 내부에 선언된 중첩 인터페이는 public 한정자만 사용 가능하여 암시적으로 public이다. 도트(.) 연산자를 사용하여 중첩된 인터페이스에 접근한다. 중첩된 인터페이스는 클래스 또는 인터페이스를 그룹화하는 목적으로 사용된다.
· IT/Java
중첩 클래스(Nested Class) 클래스 내부에 선언한 클래스로 클래스 안에 또 다른 클래스가 정의된 것이다. 관련 있는 것을 하나로 묶고 싶을 때 사용한다. 특정 클래스를 자신의 클래스 내부적인 용도로만 사용하고자 할 때 효율적이다. 두 클래스의 멤버들을 서로 쉽게 접근할 수 있다. 외부에 불 필요한 관계 클래스를 감추어 코드의 복잡성을 줄일 수 있다. 클래스의 멤버로 선언되는 중첩 클래스는 멤버 클래스이며, 메소드 내부에 선언되는 중첩 클래스를 로컬 클래스라 한다. 선언 위치에 따른 분류 선언 위치 객체 생성 조건 멤버 클래스 인스턴스 멤버 클래스 class A { class B {...} } A 객체를 생성해야 B 객체를 생성할 수 있다. 정적 멤버 클래스 class A { static clas..
· IT/Java
타입 변환 타입 변환은 인터페이스와 구현 클래스 간에 발생한다. 자동 타입 변환(promotion) 인터페이스 변수 = 구현객체; 인터페이스 변수에 구현 객체를 대입하면 인터페이스 타입으로 자동 타입 변환된다. 부모 클래스가 인터페이스를 구현하고 있으면 자식 클래스도 인터페이스 타입으로 자동 타입 변환될 수 있다. 강제 타입 변환(Casting) 구현클래스 변수 = (구현클래스) 인터페이스변수; 인터페이스 타입으로 자동 타입 변화된 후, 다시 구현 클래스 타입으로 변환되는 것이다. 구현 객체를 모르거나, 변경될 수 있어 확인 없이 강제 타입을 변환하면 예외(ClassCastException)가 발생하니 객체의 타입을 확인하는 instanceof 연산자를 사용해 확인 후 변환한다.
· IT/Java
abstract method [public abstract] 리턴타입 메소드명(매개변수, ...); 추상 메소드는 리턴 타입, 메소드명, 매개변수만 기술되고 중괄호를 붙이지 않는 메소드이다. public abstract를 생략하더라도 컴파일 과정에서 자동으로 붙는다. 내부의 모든 메서드는 추상 메소드로 정의한다. 구현 클래스에서 추상 메소드 재정의 시 public보다 더 낮은 접근 제한으로 재정의할 수 없다. default method [public] default 리턴타입 메소드명(매개변수, ...) {...} default 메소드를 추가하면 구현 클래스에서 필수로 메소드를 재정의 하지 않아도 된다. 추상 메소드는 실행부(중괄호 {})가 없지만, 디폴트 메소드는 실행부가 있다. 실행부에서는 상수 필드를..
· IT/Java
인터페이스는 데이터를 저장할 수 없기 때문에 상수 필드만 선언할 수 있다. [public static final] 타입 상수명 = 값; 인터페이스에 선언된 필드는 모두 public static final 특성을 갖기에 생략하더도 자동적으로 컴파일 과정에서 붙는다. 상수명은 대문자로 작성하며, 서로 다른 단어로 구성 시 언더바(_)로 연결한다. public interface Example { // 상수 선언 int MAX_NUMBER = 100; } 상수는 구현 객체와 관련 없는 인터페이스 소속 멤버로 인터페이스에서 바로 접근하여 상수값을 읽을 수 있다.
· IT/Java
인터페이스(Interface) 클래스를 이용하여 다중 상속을 할 경우 메소드 출처의 모호성 등의 문제 발생으로 자바에서는 클래스를 통한 다중 상속을 지원하지 않는다. 다중 상속의 이점을 버릴 수 없기에 인터페이스를 통해 다중 상속을 지원하고 있다. 인터페이스는 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스를 의미한다. 추상 클래스는 추상 메소드뿐만 아니라 생성자, 필드, 일반 메소드도 포함할 수 있지만 인터페이스는 추상 메소드와 상수만 포함할 수 있다. 인터페이스 선언 interface 인터페이스명 { ... } // default 접근 제한 public interface 인터페이스명 { ... } // pulic 접근 제한 p..
Huitopia
summary