[신세계I&C KDT][Java 프로그래밍] #11 람다 표현식 (0321)

박현아·2024년 3월 21일
0

신세계아이앤씨 KDT

목록 보기
11/42

1. 중첩 클래스 (nested class, inner class)

1) 개념

: 클래스 내에 또 다른 클래스를 지정할 수 있다.
: 클래스 내 클래스를 중첩 클래스라고 한다

2) 형태

public class 클래스{ // outer 클래스
	static int n = 10; // 가능
    private int n2 = 10;
    int n3 = 10;
      
	class 클래스 {   중첩 클래스 (inner 클래스)
		static int n = 10; // 불가능
      
        System.out.println(n2 + n3); // outer 인스턴스변수 사용 가능
	}
    static class 클래스 {
		static int n = 10; // 가능
        System.out.println(n2 + n3); // outer의 인스턴스변수 사용 불가
	}
}

3) 특징

(1) static 변수 사용 불가 (단, static inner class에서는 사용 가능)
(2) static으로 지정된 중첩클래스는 outer의 인스턴스변수 접근 불가
(3) 반드시 Outer 생성 후 Inner 생성이 가능
=> 직접 Inner 접근이 불가능하고 Outer를 통해 접근 가능. 다른 클래스에서 Inner을 사용하려면 복잡하다
=> 일반적으로 외부클래스에서는 Inner 사용 안 하고 Outer를 사용
(4) 안드로이드 코드에서 많이 쓰임

4) 종류

: outer 클래스의 어떤 위치에 있나?

class Outer {
	
    int n; //멤버변수
    public void a() { //멤버메서드
    	class Inner3 { // ㅣlocal inner class
        
        }
    }
    class Inner { // member inner class (일반적 중첩 클래스)
    
    }
    static class Inner2 {
    
    }
    public Outer() {}

}

(1) member inner class

  • 일반적인 inner class
  • Outer의 멤버처럼 작동한다
  • static 변수 선언 불가
  • private으로 된 Outer의 멤버를 접근 가능 (같은 레벨이기 때문)

(2) local inner class

  • 로컬변수처럼 동작하기 때문에 메서드 안에서만 사용이 가능. 메서드 안에서만 생성할 수 있다

(3) static inner class

  • static 변수 선언 가능
  • Outer 클래스의 멤버 변수는 사용 못 함

2. 익명 클래스 (anonymous class, 이름없는 클래스) ==> 람다 클래스로 발전

: 중첩클래스 범주에 속함

1) 용도

: 인터페이스 사용할 때 익명 클래스를 적용할 수 있다

2) 문법

public interface Flyer {
public abstract void fly();
}

(1) 일반적인 방법 (이름있는 클래스 이용)

// 가. 하위클래스 작성
public class Bird implements Flyer {
    @Override
    public void fly() {}
// 나. 하위클래스 객체 생성
    Bird b = new Bird();
    b.fly();
    //다형성 적용
    Flyer b2 = new Bird();
    b2.fly();
}

(2) 익명 클래스 (이름 없는 클래스 이용)

- 인터페이스명 변수명 = new 인터페이스명() { 
	// 추상메서드 재정의
};
변수명.메서드();
Flyer f = new Flyer() { // 클래스명이 어디에도 읎다
	@Override
    public void fly() {} // 추상메서드 재정의
};
f.fly();

3. 람다 표현식 (lambda expression)

1) 용도

: 익명클래스의 축소된 표현

2) 등장 배경

: "기능에만 집중하자" -> 함수형 프로그래밍 (functional programming)

3) 메서드 4가지 형식

(1) 파라미터 X, 리턴값 X
(2) 파라미터 O, 리턴값 X
(3) 파라미터 X, 리턴값 O
(4) 파라미터 O, 리턴값 O

4) 단일책임원칙 개발방법론

  • 하나의 객체에 하나의 기능만 추가해서 명확한 책임을 부여하자
  • 람다표현식에서 인터페이스 안의 추상메서드는 하나만 넣자 !
  • 인터페이스에 @FunctionalInterface 어노테이션을 넣어 추상메서드를 반드시 1개만 지정하도록 강제할 수 있다
@FunctionalInterface // 추상메서드를 반드시 1개만 지정하도록 강제
public interface Flyer {
	public abstract void fly();
}

0개의 댓글