3 minute read

자바프로그래밍 - 7

  • 내부 클래스
  • 람다식
  • 스트림



내부 클래스 - 1. 정의와 유형

  • 정의
    • 말그대로 ‘클래스 내부에 선언한 클래스’
    • 필요한 멤버변수/메서드 등 담긴다.
    • 외부 클래스와 밀접한 관련
  • 유형
    • 인스턴스 내부 클래스
    • 정적(static) 내부 클래스
    • 지역(local) 내부 클래스
    • 익명(anonymous) 내부 클래스 - 중요!!

안드로이드 위젯의 이벤트 핸들러 는 대부분 익명 내부 클래스



내부 클래스 - 2. 인스턴스 내부 클래스

  • 외부 클래스 생성 후에야 사용 가능!!
    • 정적(static) 변수/메서드 선언 불가능
  • 내부 클래스의 private 선언
    • 특정 클래스의 내부에서만 사용할 목적일 때



내부 클래스 - 3. 정적(static) 내부 클래스

  • 외부 클래스 생성과 무관하게 사용 가능!

  • 정적 내부 클래스의 ‘일반 메서드’
    • 외부 클래스의 ‘인스턴스 변수’ 사용 불가!
  • 정적 내부 클래스의 ‘정적 메서드’
    • 외부/내부 클래스의 ‘인스턴스 변수’ 사용 불가!
정적 내부 클래스 메서드 변수 유형 사용 가능 여부
일반 메서드 외부 클래스 - 인스턴스 변수 X
외부 클래스 - 정적 변수 O
정적 내부 클래스 - 인스턴스 변수 O
정적 내부 클래스 - 정적 변수 O
정적 메서드 외부 클래스 - 인스턴스 변수 X
외부 클래스 - 정적 변수 O
정적 내부 클래스 - 인스턴스 변수 X
정적 내부 클래스 - 정적 변수 O



내부 클래스 - 4. 지역 내부 클래스

  • 메서드 내부에 정의
    • 메서드 안에서만 사용
  • 참고!
    • ‘지역 내부 클래스’ 안에 있는 ‘지역변수’들은 모두 상수로 됨!!



내부 클래스 - 5. 익명 내부 클래스

  • 생성
    • 메서드를 호출할 때 생성 (1번)
    • 인터페이스 타입 변수에 대입할 때 new 예약어 사용하여 생성 (2번)
    • 사용한 지역변수는 상수화
  • 생성 예
    anonymousInner
    anonymousInner2

  • 접근
    anonymousInnerAccess



람다식 - 1. 함수형 프로그래밍

  • 람다식이란,
    • 자바에서 제공하는 함수형 프로그래밍 방식
    • ‘함수이름’ 없음! ‘반환형’ 없음!
  • 함수형 프로그래밍
    • 클래스 없이 함수 구현과 호출만으로 프로그램을 만드는 방식



람다식 - 2. 문법

  • 기본 형식 (반환형, 함수명 생략 = a.k.a ‘익명 함수’)
    • 기존: int add(int x, int y) {return x + y};
    • 람다식: (int x, int y) -> {return x + y;}
  • 중괄호 생략, return 생략
    • 중괄호 안, 구현부분이 한 문장인 경우
      • ex. str -> System.out.println(str);
    • 중괄호 안, 구현부분이 return문 하나일 경우
      • ex. (x, y) -> x + y
      • ex. (x, y) -> x >= y ? x : y
  • 람다식 구현
    • 먼저 인터페이스를 만들고, 인터페이스에 람다식으로 구현할 메서드 선언!

      이를 ‘함수형 인터페이스’ 라고



람다식 - 3. 함수형 인터페이스 (중요!)

  • 자바에서의 람다식 구현
    1. 함수형 인터페이스 생성
    2. 인터페이스에 람다식으로 구현할 추상 메서드 선언
    3. 메서드는 반드시 하나만!

      람다식은 익명 함수로 구현하기 때문에, 인터페이스에 메서드가 여러개라면 어떤 메서드를 구현한 것인지 모호함



람다식 - 4. 익명 객체를 생성하는 람다식 (중요!)

  • 과정
    • 람다식으로 추상 메서드 구현 후 호출하면 익명 클래스 생성

      a.k.a ‘일회용 클래스’

    • 이를 통해 익명 객체 생성
  • 정리
    • 클래스 이름 없이, 인터페이스 자료형 변수에 바로 메서드 구현부를 생성하여 대입 가능!

lamdaAnonymous

  • 람다식에서 사용하는 지역 변수 = 상수!



람다식 - 5. 함수를 변수처럼 사용하는 람다식 (중요!)

  • 인터페이스형 변수에 람다식 대입
  • 매개변수로 전달하는 람다식
  • 반환 값으로 쓰이는 람다식

lamdaFunctional



스트림 - 1. 스트림(stream)이란?

  • 여러 자료가 모인 배열/컬렉션 등의 처리 기능을 구현해 놓은 클래스!
    • ex. 정렬(sorting), 특정 값만 출력(filter) 등
  • 참고
    • 이후 학습할 I/O 스트림(입출력 목적)과는 아예 다름!



스트림 - 2. 스트림 연산(기본 제공)

  • 중간 연산 - filter(), map()
    • 함수를 수행하며, 해당 조건/함수에 맞는 결과를 추출
    • ‘최종 연산’으로 중간 연산 결과 출력
  • 최종 연산 - forEach(), count(), sum(), reduce()
    • 스트림의 자료를 소모하면서 연산 수행
    • 최종 연산 수행 후, 해당 스트림은 더 이상 사용 불가!!
  • ex. 스트림생성.중간연산.최종연산



스트림 - 3. 스트림 특징

  • 자료의 대상과 관계없이 동일한 연산을 수행
  • 한 번 생성하고 사용한 스트림은 재사용 불가
  • 스트림 연산은 기존 자료를 변경하지 않음
  • 스트림 연산은 ‘중간 연산’과 ‘최종 연산’이 있음






공지

  • 자바프로그래밍 수업 곧 종료
  • 이후 JSP, Spring 학습 진행



과제, ~5/27(금)까지 제출 (가능한 5/16(월)까지는 마무리하도록)

범위: 책 -> p.448~485(13단원) 까지

  1. 복습/연습문제 - ‘1분 복습’, ‘연습 문제’의 문제&답, ‘타이핑’ - ‘나혼자 코딩’, ‘타이핑, 디버그’

    제출파일: 이형록_220506_과제제출.txt

  2. 실습코드 - 이클립스에 타이핑 (패키지, 클래스 동일하게)

    제출파일: 이형록_220506_실습코드.txt (이클립스에서 작성한 내용을 복사)

  3. 보충자료 확인



다음 강의 준비

  • 주말 간, 과제 및 스터디 수행






nice~~~

Updated: