객체지향언어 - OOP(Object Oriented Programming)
- 모의실험을 목적으로 사용
- 실제 사물의 속성(데이터)과 기능(메서드)을 정의하여 가상세계를 구현
- 모의실험을 통해 많은 시간과 노력을 절감
- 객체지향이론은 캡슐화, 상속, 추상화 개념
- 코드의 재사용이 높다
- 유지보수가 용이하다
- 캡슐화, 상속, 다형성의 특징
배열 | 객체 |
|
|
DTO (Data Transfer Object)
VO (Value Object)
메서드()
1. 개념
- 명령어들의 집합
- 기본적으로 public static void main(String[] args) {} 제공
- 인수는 반드시 따로 따로 선언한다
- 호출한 메서드는 반드시 호출한 곳으로 되돌아온다
- return(결과값, 반환값)은 반드시 1개이다
- return이 없으면 void로 선언한다
2. 형식
- 구현
returnType 메서드명(인수형 인수, 인수형 인수, … ) {
메서드body
}
- 호출
객체명.메서드명(값1, 값2, … )
클래스명.메서드명(값1, 값2, … ) // 메서드가 static일 경우
3. 예제
Method01.java | 클래스 내에서 정적(static) 메서드와 비정적(non-static) 메서드의 사용 |
Method02.java | 네 가지 기본 산술 연산(덧셈, 뺄셈, 곱셈, 나눗셈) |
클래스 { }
1. 개념
객체를 정의한 것
2. 형식
class 클래스명 {
접근제한자 자료형 필드명;
접근제한자 메소드() {
}
class Inner클래스명 {
}
}
# 특징
- 캡슐화
- 상속성
- 다형성
cf) C vs Java
C | Java |
class Test { int a; // 멤버함수, 쓰레기값 } |
class Test { int a; // 필드, 초기화 } 클래스를 생성하면 (new) 무조건 생성자 메서드가 호출된다 |
3. 예제
PersonMain.java | 객체 생성, 구현, 메서드 호출 |
SungJukMain.java SungJuk.java |
[문제] 성적처리 - 평균은 소수이하 2째자리까지 처리한다. [실행결과] ---------------------------------------------------- 이름 국어 영어 수학 총점 평균 학점 ---------------------------------------------------- 홍길동 90 96 100 |
SungJukMain02.java | 세 명의 학생 성적을 관리하고 출력 |
SungjukMain03.java | 객체 배열을 사용하여 세 명의 학생 성적을 관리하고 출력 |
MultiArray04.java 수정 | 2차원 배열을 사용 |
SalaryDTO.java SalaryMain.java |
[문제] 월급 계산 프로그램 1. 세율 합계가 5,000,000원 이상이면 3% (0.03) 3,000,000원 이상이면 2% (0.02) 아니면 1% (0.01) 2. 숫자는 3자리마다 , 표시 3. 소수이하는 표시하지 않는다. (정수형) [실행결과] 이름 직급 기본급 수당 합계 세율 세금 월급 ------------------------------------------------------------------------ 홍길동 이사 4,800,000 300,000 송중기 사원 2,000,000 100,000 아이유 주임 2,900,000 150,000 |
ComputeDTO.java ComputeMain.java |
[문제] 합, 차, 곱, 몫 구하시오 [실행결과] 횟수 입력 : 3 x 입력 : 320 y 입력 : 258 x 입력 : 256 y 입력 : 125 x 입력 : 452 y 입력 : 365 X Y SUM SUB MUL DIV 320 258 256 125 452 365 |
생성자 (Constructor)
1. 개념
- 객체 초기화
- 생성자명 == 클래스명
- 자동호출 - 클래스를 메모리에 생성할 때 (new 할 때)
- returnType(결과형, 반환값)이 없다 (생성자는 앞에 void 안됨)
- 클래스 안에 생성자가 하나도 없을 시에는 자동으로 기본(default) 생성자 호출
- 기본 생성자 - 인수가 없는 메서드
# 생성자 Overload
2. 예제
Constructor01.java | 여러 생성자를 사용하여 객체를 초기화 Constructor01 클래스에 기본 생성자와 오버로딩된 생성자들을 정의 |
메서드 Overloading
1. 개념
하나의 클래스 안에서 똑같은 이름의 메서드가 2개 이상 존재할 때
인수(매개변수) 형이 다르거나
인수(매개변수) 개수가 다른 경우
class AA {
puublic void sub(int a) {}
}
class BB {
public void sub(int a) {} // 1
public void sub(String a) {} // 2
public void sub(char a) {} // 3
public void sub(int a, int b) {} // 4
public void sub() {} // 5
public int sub(int a) {} // 6
}
1, 6은 오버로딩 아님 - 하나의 클래스 안에서 메서드 이름, 인수 자료형, 인수 개수가 같음
2. 예제
VarArgs.java | 생성자 sum() : 가변 인수(VarArgs)를 사용하여 다양한 개수의 인수를 처리 |
상속
1. 개념
- is ~ a 관계 ~이다 ex) Taxi is a veihicle
- 클래스의 재구현
- 상속받는 클래스는 상속해주는 클래스의 생성자와 private를 제외한 모든 것을 상속받는다
- Super class : 상속해 주는 클래스(부모)
- Sub class : 상속받는 클래스(자식) // 부모것까지 메모리 생성
- 접근 제한자 protected는 Sub class에서 접근이 가능하다
- Sub class로 객체를 생성하면 Super class와 자신의 생성자를 모두 호출한다
- 다중상속을 할 수 없다
- [형식] class Sub 클래스명 extends Super클래스명 { }
2. 예제
Super.java SubMain.java ChildMain.java |
상속 확인 각 클래스의 생성자와 메서드 동작 확인 |
package
1. 개념
- 서로 관련이 있는 *.class 파일들의 모임
- 맨 첫줄에 1번만 기술할 수 있다
- 소문자로 기입
- 자바가 제공하는 기본 패키지 java.lang (default package)이다
2. 예제
Apple.java Zoo.java Zoo2.java Safari.java |
접근 제어 확인 |
접근제어자 (Modifier)
1. 개념
- private
- 모든 패키지에서 접근 가능
- default
- 같은 패키지에서만 접근 가능
- default 라고 직접 쓰는것이 아니라 public, protected, private를 쓰지 않은 상태
- protected
- 같은 패키지나 다른 패키지의 상속받은 클래스에서 접근 가능
- 다른 패키지에서 Sub 클래스라면 접근이 가능하다
- 단 Sub 클래스로 생성해야만 한다 Super클래스로 생성하면 접근이 안된다
- private
- 같은 클래스 내에서만 접근 가능
- 종류
클래스 | 같은 패키지 | 다른 패키지 | 다른 패키지 자식 클래스 |
|
private | O | X | X | X |
default | O | O | X | X |
protected | O | O | X | O |
public | O | O | O | O |
범위 : private < default < protected < public
메서드 Overriding
1. 개념
- Super 클래스와 Sub 클래스에 똑같은 메서드가 존재
- 모든 우선권은 Sub 클래스가 갖는다
- Super, Sub 클래스의 접근제어자(Modifier)는 달라도 되지만
- Super 보다 Sub 클래스의 접근제어자(Modifier)가 더 커야한다
Overload | Override | |
관계 | 쌍둥이 (형제 관계) | 부모, 자식 |
정의 |
|
|
예시 | class Test{ public void sub(int a) { } public void sub(int a, int b) { } public int sub(char a) { } } class Sample { public int sub(char a) { } } |
class Super { public void display(int a) { // private 여도 가능 - Sub 의 접근제어자가 public이기 때문 (Sub의 접근제어자가 더 크기 때문) } } class Sub extends Super { public void display(int a) { } } |
2. 예제
ShapeMain.java | 삼각형, 사각형, 사다리꼴 다형성을 활용하여 각 도형 객체 생성, 넓이 계산, 출력 |
TestMain.java | 상속과 다형성(polymorphism) 메서드 오버라이딩과 변수 숨김(variable hiding) |
@ Annotation
1. 종류
- @Override
- @Deprecated
- @SupperessWarnings(옵션)
2. 옵션
- all : 모든 경고를 억제
- cast : 캐스트 연산자 관련 경고 억제
- dep-ann : 사용하지 말아야 할 주석 관련 경고 억제
- deprecation : 사용하지 말아야 할 메서드 관련 경고 억제
- fallthrough : Switch문에서의 break 누락 관련 경고 억제
- finally : 반환하지 않는 finally 블록 관련 경고 억제
- null : null 분석 관련 경고 억제
- rawtypes : 제네릭을 사용하는 클래스 매개변수가 불특정일 때의 경고 억제
- unchecked : 검증되지 않은 연산자 관련 경고 억제
- unused : 사용하지 않는 코드 관련 경고 억제
this & this()
1. 개념
- this 는 자신의 클래스의 참조값을 가진다
- this() 는 Overload된 다른 생성자를 호출할 수 있다
- this() 는 생성자의 첫줄에 써야한다
this | 생략 가능 자기 자신 클래스의 정보(reference - 참조값)를 가진다 |
this() | Overload 된 다른 생성자 호출할 때 사용 생성자에서 반드시 첫줄에 써야한다 |
public void setX(int x) {
// this를 사용하여 클래스 멤버 변수 x에 매개변수 x 값을 할당
this.x = x; // this : 클래스 것.
}
super & super()
1. 개념
- super 는 부모 클래스의 참조값을 가진다
- super() 는 부모 클래스의 생성자를 호출할 수 있다
- super() 는 생성자의 첫줄에 써야한다
varargs (Variable Argument)
1. 개념
- JDK 5.0에서 추가
- 통일된 인수의 자료형에 인수(매개변수)의 개수를 자유롭게 구현
- 내부적으로 배열화 작업으로 처리해 준다
2. 예제
VarArgs.java | 생성자 sum() : 가변 인수(VarArgs)를 사용하여 다양한 개수의 인수를 처리 |
instanceof
1. 개념
- instanceof 연산자: 객체가 특정 클래스의 인스턴스인지 확인
- casting(형 변환)이 되는지 안되는지를 판별 // 잘못된 형변환은 ClassCastException을 발생시킬 수 있
- 객체에 원하는 클래스 타입이 메모리 할당되었는지 안되었는지를 확인
2. 예제
InstanceOf.java | 클래스 간의 형변환(casting) & instanceof 연산자를 사용하여 객체가 특정 클래스의 인스턴스인지 확인 |
final (상수화)
1. 개념
- final 변수는 값을 변경할 수 없다
- final 변수는 반드시 초기값을 주어야 한다
- final 변수는 반드시 생성자에서 초기값을 주어야 한다
- static final 필드는 static 구역에서 초기값을 주어야 한다
- final 변수는 대문자로만 기술
- final 메서드는 Override 를 할 수 없다
- final 클래스는 자식 클래스를 가질 수 없다 - 상속이 안된다
2. 예제
FinalMain.java | final, static, enum |
enum (열거형)
1. 개념
- 자바의 열거형은 자료형(Data Type)을 의미한다
- 서로 관련있는 상수들을 모아 놓은 것
- enum 상수들은 묵시적으로 static final status 형으로 선언된다
- 먼저 자료형을 선언한 다음에 사용한다
- 대문자로 사용
- 열거된 순서에 따라 0부터 시작
Object 클래스
1. 개념
- Java의 최상위 클래스
- Java의 모든 클래스는 Object로부터 상속받는다
- extends Object 라고 직접 쓰지 않아도 된다
- Object 안에서는 ==, equals() 가 모두 참조값(reference) 만으로 비교한다
- 단, String만이 equals() 내용(문자열)을 비교한다
2. 종류
- equals() : 객체 내용 비교 (기본적으로 주소 비교) (String 클래스에서는 내용 비교)
public bollean equals(Object obj)
- hashCode() : 객체의 해시 코드 반환
public int hashCode()
- toString() : 객체를 문자열로 표현하는 방법을 정의 (ArrayList의 toString() : 리스트의 요소를 읽기 쉽게 출력)
obj.toString // 클래스명@16진수
3. 예제
ObjectMain.java | Object 클래스, 그 주요 메서드 사용 |
추상클래스
: Sub class 제어 가능
1. 개념
- 추상화 작업
- 메서드에 body { } 가 없는 메서드
- 추상메서드에는 abstract 라는 키워드를 써야한다
- 추상메서드는 {} body 없이 ;를 써야한다
- 추상 메서드는 구현이 없이 선언만 되어 있다
- 이를 상속받는 클래스에서 반드시 구현해야 한다
- 추상메서드가 있는 클래스는 반드시 추상클래스이어야 한다
- 추상메서드가 없는 추상클래스를 의미상의 추상클래스라고 한다
- 의미상의 추상클래스의 메서드는 모두 빈 body 로 되어있다
- 추상클래스는 자신의 클래스로 메모리 생성을 할 수 없다
- 추상클래스는 new 불가능
- 추상 클래스는 직접 인스턴스를 생성할 수 없다 (메모리 생성 불가능)
- 추상 클래스는 다른 클래스에서 상속받아 구현해야 한다
2. 추상클래스의 메모리 생성
- Sub Class를 이용 (반드시 Sub Class가 부모의 추상메서드를 Override 해야 한다)
- 메서드 이용
- 추상메서드는 반드시 Sub Class에서 Override 해주어야 한다
- Override를 안하면 Sub Class 마저도 abstract가 되어야 한다
3. 예제
AbstractTest.java AbstractMain.java |
추상 클래스와 그 구현 기본 메서드 형식 // POJO 형식 (Plain Old Java Object) Source > Generate Getters and Setters |
ShapeMain.java | 다양한 도형(삼각형, 사각형, 사다리꼴)의 넓이 계산, 출력 |
NumberMain.java | NumberFormat 클래스를 사용하여 숫자를 형식화 숫자를 다양한 형식으로 포맷팅하기 [java api 8] java.text > NumberFormat Class NumberFormat java.lang.Object java.text.Format java.text.NumberFormat |
Today.java | 현재 날짜, 시간 정보 처리 Calendar 객체 사용 |
Interface
: is ~ a 관계
: 틀
1. 개념
- 표준명세서에서의 역할
- 상수와 추상 메서드만 존재
- public static final 생략 가능
- abstract 생략 가능
- interface를 implenets한 클래스는 반드시 추상메서드를 Override(재구현)해야 한다
- 다중상속이 가능
- Java 의 Class는 다중상속이 안됨
- Interface 는 다중상속 가능
- 상속과 같이 쓰일 때는 extends, implemets 순서로 쓴다
- 자바에서 중요한 개념으로, 클래스가 어떤 메서드를 구현해야 하는지를 정의하는 일종의 "계약" 또는 "틀"
- 인터페이스는 실제 메서드 구현을 포함하지 않고, 메서드의 시그니처만 정의
- 인터페이스 자체는 인스턴스화될 수 없으며, 구현하는 클래스가 해당 메서드를 구체적으로 작성해야 한다
2. 형식
interface 인터페이스명 {
....
}
class 클래스명 implements 인터페이스명{
...
}
[EX] 맞는 문장을 모두 고르시오
class A{}
interface InterA{}
// 정답 : 1, 2, 8
1. class B extends A { } // O. 클래스 B가 클래스 A를 상속 가능
2. class B implements InterA { } // O. 클래스 B가 인터페이스 InterA를 구현 가능
3. class B implements A { } // X. 클래스 B는 다른 클래스를 구현 불가능. 상속해야 함
4. class B extends InterA { } // X. 클래스는 인터페이스를 상속 불가능. 인터페이스를 구현해야 함
5. interface InterB extends A { } // X. 인터페이스는 클래스를 상속 불가능
6. interface InterB implements InterA { } // X. 인터페이스는 다른 인터페이스를 구현 불가능. 상속해야 함
7. interface InterB implements A { } // X. 인터페이스는 클래스를 구현 불가능
8. interface InterB extends InterA { } // O. 인터페이스는 다른 인터페이스를 상속 가능
- extends 앞 뒤는 같아야 함
Class extends Class
Interface implements Interface
# Interface
- implements
>> 모든 추상메서드 Override
- 대신 Oveeride 해주는 클래스 (모든 추상메서드를 Override 해주는 클래스)
- 메서드
- 익명 Inner class
>> 모든 추상메서드 Override
3. 특징
- 메서드 선언
- 인터페이스는 메서드의 이름, 반환 타입, 매개변수 등을 정의한다.
- 그러나 메서드의 본문{구현}은 포함되지 않는다
- 상수
- 인터페이스는 상수를 포함할 수 있으며, 이러한 상수는 암묵적으로 public, static, final로 선언된다
- 다중 상속
- 인터페이스는 다른 인터페이스를 여러 개 상속할 수 있다
- 이를 통해 여러 부모 인터페이스의 메서드를 상속받아 사용할 수 있다
- 구현클래스
- 인터페이스를 구현하는 클래스는 인터페이스에 정의된 모든 메서드를 구체적으로 구현해야 한다
4. 예제
ℹ️ InterA.java ℹ️ InterB.java ℹ️ InterC.java InterMain.java |
인터페이스 & 인터페이스를 활용한 다중 상속 |
ℹ️ Compute.java ComputeMain.java ComputeService.java Sum.java Sub.java Mul.java Div.java |
[계산기 프로그램] 인터페이스와 클래스 상속(다형성)을 활용하여 다양한 연산을 수행 |
중첩클래스
1. 개념
- has ~ a 관계
- 다른 클래스 내부에 정의되는 클래스
- 스태틱 클래스 (static class) : 독립적으로 object로 만들어질 수 있음
- 내부 클래스 (inner class) : 자신이 정의된 클래스의 오브젝트 안에서만 만들어질 수 있음
- 멤버 내부 클래스 (member inner class) : 멤버필드처럼 오브젝트 레벨에 정의
- 안쪽에 있는 클래스는 바깥쪽 클래스의 모든 멤버에 접근 가능
- 하지만 바깥쪽 클래스는 안쪽의 클래스 멤버에 접근 불가능
- 단, 안쪽에 있는 클래스로 객체를 선언하면 접근 가
- 로컬 내부 클래스 (local inner class) : 메서드 레벨에서 로컬 변수를 선언하여 사용하듯 선언된 메서드 내에서만 사용 가능
- 익명 내부 클래스 (anonymous inner class) : 이름을 갖지 않음
- 멤버 내부 클래스 (member inner class) : 멤버필드처럼 오브젝트 레벨에 정의
# Inner class
class 클 {
static class 클 {
}
class 클 {
// member inner class
}
method() {
class 클 {
// local inner class
}
}
{
// anonymous inner class
}
}
2. 예제
Outer.java Outer.class Outer$Inner.class |
인스턴스 중첩 클래스 (Non-static Nested Class) 예제 Outer 클래스 & 그 내부에 선언된 Inner 클래스는 중첩 클래스(내부 클래스) |
ℹ️InterA.java AbstractTest.java AbstractExam.java AbstractMain.java AbstractMain.class AbstractMain$. |
익명 내부 클래스 (Anonymous Inner Class) 예제 추상 클래스와 인터페이스를 사용하여 익명 내부 클래스 생성 |
Generic
1. 개념
- 클래스, 인터페이스, 메서드를 다양한 타입으로 동작하게 만들기 위한 기능
- 타입을 매개변수화하여 컴파일 시점에 타입을 확인할 수 있게 해준다 (다양한 참조 타입을 처리)
- 제네릭에서 사용되는 타입 매개변수는 참조 타입만 사용할 수 있다
- 원시 타입을 사용할 경우 해당 타입의 래퍼 클래스(Wrapper Class)를 사용한다
- 제네릭은 동적으로 타입을 결정하지 않고 컴파일 시 타입이 결정되므로 보다 안전한 프로그래밍이 가능하다
- 실행 중에 타입 충돌 문제를 방지할 수 있다
- 프로그램 개발 시 타입 캐스팅 절차가 필요 없어지고 ClassCastException을 방지할 수 있다
- 클래스 생성 시 타입을 명시해 준다
- <T> <E> <K> <V> 4개의 문자로 표시한다
- 와일드카드 <?> : 제네릭 타입의 인스턴스를 생성할 때 타입을 불특정하게 설정 가능
- 와일드카드를 사용하면 특정 타입을 지정하지 않고 제네릭 타입의 객체를 생성
- 와일드카드를 사용하면 set 메서드를 호출 불가능; 와일드카드가 북특정 타입을 나타내기 때문
- 와일드카드를 사용하여 객체를 생성한 경우, 반환된 값을 사용할 때는 적절한 타입으로 형변환해야 한다
<T> | Type (데이터형) |
<E> | Element (요소, 항목) |
<K> | Key |
<V> | Value |
2. 예제
GenericMain.java | 제네릭(Generic) 클래스를 사용하여 다양한 데이터 타입 다루기 제네릭 클래스 : 특정 타입에 대해 정의된 클래스를 인스턴스화할 때 타입을 지정할 수 있게 해줌 |
GenericMain2.java | 제네릭을 사용하여 다양한 타입의 데이터 처리 AutoBoxing unAutoBoxing |
Comparable / Comparator 인터페이스
1. 개념
- 객체를 정렬하는데 필요한 메서드가 정의되어 있다
- 비교대상자가 더 크면(<) -1, 같다면(==) 0, 작으면(>) 1을 반환시킨다
- 이 값을 비교하여 정렬을 할 수 있다
- 일반적인 int, char, double 같은 타입의 배열이라면 다음의 함수들을 이용
Collections(또는 Arrays).sort() | 정렬 |
Collections(또는 Arrays).reverser() | 뒤집기 |
2. 종류
- Comparable (java.lang)
- 기본 정렬기준을 구현하는 데 사용
- 주로 Integer와 같은 wrapper 클래스와 String, Date, File과 같은 것
- 기본적으로 오름차순으로 정렬되도록 구현되어 있다
public int compareTo(T o)
public final class Integer
extends Number
implements Comparable<Integer>
- Comparator (java.util)
- 기본 정렬기준 외에 다른 기준으로 정렬하고자 할 때 사용
public int compare(T o1, T o2)
public boolean equals(Object obj)
Collections.sort()
객체 정렬
3. 예제
PersonDTO.java PersonMain.java |
객체 생성, 출력 PersonDTO {} : Comparable 인터페이스 구현하여 객체의 비교와 정렬을 지원 PersonMain {} : PersonDTO 객체를 초기화, 다양한 방식으로 출력하여 객체의 정보 확인 ![]() |
PersonDTO.java PersonSort.java |
문자열 배열의 정렬, PersonDTO 객체의 정렬 자바의 배열과 컬렉션 프레임워크를 사용하여 데이터를 정렬 PersonDTO {} : Comparable 인터페이스 구현하여 객체의 비교와 정렬을 지원 PersonSort {} : PersonDTO 객체를 정렬, 출력 |
함수형 프로그래밍
함수형 프로그래밍
- 함수를 정의하고 이 함수를 데이터 처리부로 보내 데이터를 처리하는 기법
- 데이터 처리부는 데이터만 가지고 있을 뿐, 처리 방법이 정해져 있지 않아 외부에서 제공된 함수에 의존한다
람다식
1. 개념
- 자바는 함수형 프로그래밍을 위해 Java 8부터 람다식을 지원한다
- 데이터 처리부는 람다식을 받아 매개변수에 데이터를 대입하고 중괄호를 실행시킨다
- 자바는 람다식을 익명 구현 객체로 변환한다
- 인터페이스의 익명 구현 객체를 람다식으로 표현하려면 반드시 하나의 추상메소드만 가져야 한다
- 인터페이스가 단 하나의 추상메소드를 가질 때, 이를 함수형 인터페이스 라고 한다
- 인터페이스가 함수형 인터페이스임을 보장하기 위해서는 @FunctionalInterface 어노테이션을 붙이면 된다
- 컴파일 시 추상메소드가 하나인지 검색하기 때문에 정확한 함수형 인터페이스를 작성할 수 있다
2. 형식
(매개변수, ...) -> { 처리내용 }
public interface Runnable { // { } : 익명 객체
void run();
}
람다식 => ( ) -> { }
@FunctionalInterface
public interface Calculable { // { } : 익명 객체
void calculate(int x, int y);
}
람다식 => (x, y) -> { }
3. 예제
메서드 참조
1. 개념
- 메소드를 참조해서 매개변수의 정보 및 리턴 타입을 알아내 람다식에서 불필요한 매개변수를 제거하는 것을 목적으로 한다
큰수를 리턴하는 람다식
(left, right) -> Math.max(left, right);
위에서 단순히 left, right 값을 매개값으로 전달하는 역할만 하기 때문에 메소드 참조를 이용하면 깔끔하게 처리된다.
Math :: max;
2. 형식
- 정적 메소드
- 클래스 :: 메소드
- 인스턴스 메소드
- 참조변수 :: 메소드
3. 예제
생성자 참조
1. 개념
- 생성자를 참조한다는 것은 객체를 생성하는 것
- 생성자 Overload 되어 여러 개가 있을 경우, 함수형 인터페이스의 추상메소드와 동일한 매개변수 타입과 개수를 가진 생성자를 찾아 실행한다
(a, b) -> {
return new 클래스(a, b);
}
=> 생성자 참조 클래스 :: new
메서드 참조의 종류
- 정적 메서드 참조: ClassName::staticMethodName
- 특정 객체의 인스턴스 메서드 참조: instance::instanceMethodName
- 임의 객체의 인스턴스 메서드 참조: ClassName::instanceMethodName
- 생성자 참조: ClassName::new
'Language > Java' 카테고리의 다른 글
Java - JDBC (0) | 2024.08.07 |
---|---|
문법 - Library (0) | 2024.08.07 |
문법 - 배열 (0) | 2024.07.10 |
문법 - 반복문 (0) | 2024.07.10 |
문법 - 예외 처리 (0) | 2024.07.05 |