본문 바로가기
WEB/Back-end

properties, path, lambda, stream (Java)

by 최새벽 2024. 7. 18.

Properties

  • =왼쪽은 key, =오른쪽은 value
  • 보안 목적으로 사용
driver = oracle.jdbc.OracleDriver
url = jdbc:oracle:thin:@localhost:1521:orcl
username = scott
password = tiger
admin = \uD55C\uAE00

경로

  • path: 폴더 + [파일명]
  • 절대 경로
    • 최상위 디렉토리부터 시작
      • 윈도우: 드라이브 명 C: 으로 시작
      • 맥, 리눅스, 유닉스: /로 시작
    • 예시: C:\Windows
  • 상대 경로
    • 현재 위치에 따라 달라짐
      • 현재 위치: .
      • 현재 위치보다 한 단계 위: ..

람다식

  • 함수
    • 단독으로 존재.
    • 함수를 정의하고 해당 함수를 데이터 처리부로 보낼 수 있음.
    • 데이터 처리부는 데이터만 가지고 처리 방법은 정해져 있지 않음
  • 메서드
    • 클래스 안에 존재
  • 함수형 프로그래밍: 매개변수에 함수를 넣을 수 있음 -> 자바에서는 안 됨(매개변수로 메서드를 전달할 수 없음, 객체를 전달할 수는 있음)
  • 람다식
    • 매개변수 자리에 값이 아닌 기능을 넣어주고 싶어서 사용
    • 변수에 타입 안 씀
    • 자바는 람다식을 익명 구현 객체로 변환함
    • -> : 이름이 없는 메서드
    • 추상메서드가 하나만 있는 인터페이스는 람다식 활용하기 좋음
  • 예시1
Thread thread = new Thread(() - > {
    System.out.println("run 메서드 재정의"); // 실제로 run 메서드를 재정의한 구문임
    // Runnable 인터페이스에서 메서드가 단 하나만 존재하기 때문에 람다식 재정의가 가능함
    // 함수적 인터페이스: 함수처럼 사용하기 위해서 추상 메서드 하나만을 가지고 있는 인터페이스 → 람다식 활용이 가능함
    // 스레드, 이벤트 등에 람다식 많이 활용
}); ```

- 예시2

```java
Collections.sort(list, (o1, o2) -> (int)o2.get("age") - (int)o1.get("age"));
// 내부가 실행문이면 세미콜론 넣어져있음
// new Comparator없이 재정의 가능
// 위에서 2번째 매개변수는 Comparator 타입의 객체이어야 함
// 즉 람다식은 익명 구현 객체로 변환된다는 의미
@FunctionalInterface
public interface Calculable {
    void calculate(int x, int y);
}
public class LambdaExample {
    public static void main(String[] args) {
        action((x, y) -> {
            int result = x + y;
            System.out.println("result: " + result);
        });

        action((x, y) -> {
            int result = x - y;
            System.out.println("result: " + result);
        });
    }

    public static void action(Calculable calculable) {
        int x = 10;
        int y = 4;

        //데이터 처리
        calculable.calculate(x,y);
    }
}

람다식 요약

  • 익명 구현 객체 메서드 재정의 형태
  • 화살표 기호 ->
  • 조건: 추상 메서드가 하나만 존재하는 인터페이스
  • 인터페이스명, 추상 메서드명 알 필요 없음 → 이름 없는 메서드로 재정의
  • 자리(메서드의 매개변수, 필드, 변수)에 타입이 인터페이스
    • 추상메서드 2개 이상 → 익명 구현 객체
    • 추상메서드 1개 → 람다식
  • 실행 코드(흐름이 발생하는 코드)에서 동작하는 게 아니라, 메서드 내에서 동작

스트림(Stream)

  • 내부 반복
  • 컬렉션 자료형 → 기본 타입 자료형 배열 : mapToXXX() + toArray()
    • mapToInt...etc
  • .forEach()

데이터 입출력

  • 입출력 스트림
    • 바이트 스트림 : 그림, 멀티미디어, 문자 등 모든 종류의 데이터를 입출력 할 때 사용. 용량이 적고 빠름
    • 문자 스트림 : 문자만 입출력할 때 사용, 메모장으로 깨지지 않게 열리면 문자 스트림
  •   스트림 활용시 try-catch구문에서 close는 final구문에 작성해야 함. 만약에 try 구문에 작성하면, close이전에 오류 발생시 서버 리소스 낭비 가능성 존재하기 때문

'WEB > Back-end' 카테고리의 다른 글

JPA, Entity Class(SpringBoot)  (0) 2024.07.29
Comparable, Comparator (Java)  (0) 2024.07.18
컬렉션_List, Set, Map (Java)  (0) 2024.07.18
멀티스레드, 동기화 (Java)  (0) 2024.07.18
제네릭 타입(Generic Type) (Java)  (0) 2024.07.18