WEB/Back-end
properties, path, lambda, stream (Java)
최새벽
2024. 7. 18. 20: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이전에 오류 발생시 서버 리소스 낭비 가능성 존재하기 때문