JAVA

· JAVA
익명 객체를 생성하는 람다식 자바는 객체 지향 언어로 객체 없이 메서드를 호출할 수 없다. 람다식은 객체 없이 인터페이스의 구현만으로 메서드를 호출할 수 있는데, 그 이유는 익명 내부 클래스에 있다. 익명 내부 클래스는 클래스 이름 없이 인터페이스 자료형 변수에 바로 메서드 구현부를 생성하여 대입할 수 있음 즉, 람다식으로 메서드를 구현해서 호출하면 컴퓨터 내부에서는 익명클래스가 생성되고, 이를 통해 익명 객체가 생성되는 것 StringConcat concat3 = new StringConcat() { @Override public void makeString(String s1, String s2) { System.out.println(s1 + "," + s2); } }; // => 내부적으로 익명 구현..
· JAVA
자바 8에 추가된 가장 큰 특징 "함수형" 프로그래밍 형태를 받아들인 결과 함수형 프로그램이란? (함수형 vs 객체지향) 함수형 : 1950년대, 객체지향 : 1990년대 (역사가 더 오래되었음) 기능 위주의 프로그래밍 기법 매개변수만을 사용하여 만드는 함수(순수 함수, pure function)를 구현하고 호출함으로써 외부 자료에 부수적인 영향을 주지 않도록 구현하는 방식 객체 지향 : 객체를 기반으로 구현, 클래스에 속성과 기능을 정의 함수형 : 함수를 기반으로 자료를 입력받아 구현, ,기능 즉 함수가 따로 존재 함수 이름이 없는 익명함수를 만드는 것 메서드의 이름과 리턴타입을 빼고 '->'를 활용하여 람다식을 구현 ex) public int add(int x, int y) { return x + y..
· JAVA
익명객체의 로컬 변수 사용 메서드의 매개변수나 로컬변수를 익명 객체 내부에서 사용할 때 제한이 있음 익명객체는 메서드 실행이 종료되면 없어지는 것이 일반적이지만, 메서드가 종료되어도 계속 실행 상태에 존재할 수 있음 (ex. 익명 쓰레드 객체 사용) 메서드의 매개변수나 로컬변수를 익명 객체 내부에서 사용할 때 매개변수나 로컬변수는 메서드 실행이 끝나면 스택(stack) 메모리에서 사라지기 때문에 익명객체에서는 지속적으로 사용할 수 없음 이런 문제를 해결하기위해 자바는 컴파일 시 익명 객체에서 사용하는 매개변수나 로컬변수의 값을 익명 객체 내부에 복사해두고 사용함 매개변수나 로컬변수가 수정되어 값이 변경되면 수정된 값과 익명 객체에 복사해둔 값이 달라지게 되어 매개변수나 로컬변수를 final로 선언할 것을..
· JAVA
버튼의 클릭 이벤트 처리 Button 클래스 정의 class Button { static interface OnClickListener { //중첩 인터페이스 선언 void onClick(); } OnClickListener listener; //인터페이스 타입 인스턴스 변수(필드) 선언 public void setOnClickListener(OnClickListener listener) { // 매개변수의 다형성 this.listener = listener; } // => 외부에서 구현객체를 받아 필드에 대입 public void touch() { listener.onClick(); // 구현 객체의 onClick() 메서드 호출 } } Button 2개를 가지고 있는 Window 클래스를 정의(가정)..
· JAVA
인터페이스 타입의 필드 또는 변수를 선언하고, 구현 객체를 초기값으로 대입 interface RemoteControl { public abstract void turnOn(); void turnOff(); //abstract 생략됨 } class TV implements RemoteControl { @Override public void turnOn() { System.out.println("TV켜기"); } @Override public void turnOff() { System.out.println("TV끄기"); } } class UseImplentesClass { RemoteControl rc = new TV(); // 멤버변수에 구현 객체를 대입 public void method() { Remo..
· JAVA
익명객체의 개념과 특징 클래스 이름이 없는 객체 클래스 선언과 객체의 생성을 동시에 하기 때문에 단 한번 사용될 수 있고 오직 하나의 객체만을 생성할 수 있는 일회성 클래스 이름이 없기때문에 생성자도 가질 수 없다. 익명 객체를 만들기 위해서는 어떤 클래스를 상속하거나 인터페이스를 구현 부모클래스의 이름이나 구현하고자 하는 인터페이스의 이름을 사용해서 정의하므로 한번에 하나의 클래스로 상속받는 동시에 인터페이스를 구현함 단 하나의 클래스를 상속받거나 단 하나의 인터페이스만을 구현할 수 있음 익명객체 문법 new 슈퍼클래스이름() { // 멤버 선언 }; 또는 new 구현인터페이스이름() { // 멤버 선언 }; 익명객체를 사용하지 않는 일반적인 상속 관계 class NormalParent { public..
· JAVA
2023.10.31 - [JAVA] - [JAVA] 제네릭(Generic, 일반화) - 1 [JAVA] 제네릭(Generic, 일반화) - 1 클래스 정의 시 사용되어질 데이터타입을 미리 명시하지 않고 객체 사용 전 사용할 타입을 객체 생성 시 명시하여 사용하는 기법 주로, Collection API의 클래스들이 제네릭이 적용되어 있으므로 인 cutyqueen.tistory.com Object 타입을 사용하여 관리하는 데이터는 Object 타입으로 저장 가능 Object o = nc.getData(); ➡️만약, Onject 타입을 실제 데이터타입으로 변환하는 경우 잘못된 타입 변환(다운캐스팅)으로인해 ClassCastException 발생 가능 ➡️ 다운캐스팅 필요 String name = (Strin..
· JAVA
클래스 정의 시 사용되어질 데이터타입을 미리 명시하지 않고 객체 사용 전 사용할 타입을 객체 생성 시 명시하여 사용하는 기법 주로, Collection API의 클래스들이 제네릭이 적용되어 있으므로 인스턴스 생성 시 제네릭 타입으로 사용할 데이터타입을 지정 지정된 데이터타입이 클래스 내의 임시 데이터타입을 대체하게 됨 제네릭을 적용하지 않는 일반 클래스 정의 사용할 데이터타입을 특정 타입으로 관리하는 일반 클래스 class NormalIntegerClass { int data; public int getData() { return data; } public void setData(int data) { this.data = data; } } NormalIntegerClass nic = new NormalI..
ઇ땅코니ଓ
'JAVA' 카테고리의 글 목록 (3 Page)