[학습 목표]
1. 자바의 유틸 패키지(java.util)를 활용하여 다양한 컬렉션 프레임워크와 유틸리티 기능을 효과적으로 사용할 수 있다. 2. 람다식을 이해하고 이를 활용하여 코드의 간결성과 가독성을 높이며 함수형 프로그래밍을 구현할 수 있다. 3. 스트림 API를 활용하여 데이터를 효율적으로 변환, 필터링, 집계 및 병렬 처리를 할 수 있으며, 성능을 최적화할 수 있다. 4. 스트림의 중간 연산 (Intermediate Operation) 과 최종 연산 (Terminal Operations)의 개념을 이해하고, 다양한 연산 (map, filter, sorted, reduce, collect 등)을 활용하여 데이터를 효과적으로 처리할 수 있다. |
java.util 패키지
java.util 패키지에서 날짜 , 시간 , 패턴, split을 나타내는 클래스들을 살펴보겠다.
- java.util.Calendar
package com.sec11.myutil02;
import java.util.Calendar;
public class CalendarTest {
public static void main(String[] args) {
//추상클래스 -> 필드 -> 생성자, 메소드 -> getInstance() 메소드 : static 메소드를 통해 메모리를 단한번 로드
Calendar cal = Calendar.getInstance(); //싱글톤 패턴 public static Calendar getInstance()
int year = cal.get(Calendar.YEAR);
int mon = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
int hour = cal.get(Calendar.HOUR_OF_DAY);
int min = cal.get(Calendar.MINUTE);
int sec = cal.get(Calendar.SECOND);
System.out.println("현재 날짜와 시간");
System.out.println(year + "년 " + mon + "월 " + day + "일");
System.out.println(hour + "시 " + min + "분 " + sec + "초");
System.out.println("24시간 기준 시간 : " + cal.get(Calendar.HOUR_OF_DAY));
System.out.println("12시간 기준 시간." + cal.get(Calendar.HOUR));
System.out.println("오늘이 이번주의 몇번째 날: " + cal.get(Calendar.DAY_OF_WEEK));
System.out.println("이번주의 요일이 이번달의 몇번째 요일 : "
+ cal.get(Calendar.DAY_OF_WEEK_IN_MONTH) +" 번째");
System.out.println("1년중에 오늘이 " + cal.get(Calendar.DAY_OF_YEAR)
+ " 번째 날 ");
}
}
이 코드를 보면 Calendar의 getInstance() 메소드를 사용한 것을 볼 수 있다.
2) java.util.Date
package com.sec11.myutil02;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateTest {
public static void main(String[] args) {
// (국제표준시각(UTC, GMT) 1970/1/1/0/0/0 으로부터 경과한 시각)
// 밀리초 단위(*1000은 1초), 음수이면 이전 시각
long time1 = System.currentTimeMillis();
System.out.println(time1);
Date today = new Date(); // 현재시간 출력_ cmd
System.out.println(today);
long time2 = System.currentTimeMillis();
System.out.println((time2 - time1) / 1000.0);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //Zone, 형식의 포맷
System.out.println("현재날짜 : " + sdf.format(today));
}
}
위 코드는 Date 클래스를 사용하여 현재 시간과 날짜를 리턴받는 것을 볼 수 있다.
3) java.util.Regex
package com.sec11.myutil02;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexTest02 {
public static void main(String[] args) {
String str = new String("java2 java3 java4");
System.out.println("대상문자열 : " + str);
System.out.println("--------------------------\n");
Pattern pattern01 = Pattern.compile("java");
Matcher matcher01 = pattern01.matcher(str);
System.out.println("java를 찾아서 spring으로 변경");
System.out.println(matcher01.replaceAll("spring"));
System.out.println("--------------------------\n");
Pattern pattern02 = Pattern.compile("java");
Matcher matcher02 = pattern02.matcher(str);
StringBuffer appStrBuf = new StringBuffer();
while (matcher02.find()) {
matcher02.appendReplacement(appStrBuf, "spring");
}
matcher02.appendTail(appStrBuf);
System.out.println("java를 찾아서 spring으로 변경");
System.out.println(appStrBuf.toString());
}
}
위 코드는 java.util.regex.Matcher와 java.util.regex.Pattern을 사용하여 조건에 맞는 문자열을 찾아 변환하는 코드를 짠 것을 볼 수 있다.
실행 결과는 다음과 같다.
4) split
package com.sec11.myutil02;
public class SplitTest {
public static void main(String[] args) {
String str ="java,jdbc,servlet/jsp,spring/JDBC|Template";
String[] res= str.split(",|\\/|\\|", 7);
for(String result : res){
System.out.println(result);
}
}
}
위 코드는 split을 사용하여 문자열을 분리하는 코드를 짠 것이다.
5) java.util.StringTokenizer
package com.sec11.myutil02;
import java.util.StringTokenizer;
/*
* IO 단위 문자열 추출해서 < find 할 경우 >문자열 단위로 자르기 찾기 , 변환
* 1. Scanner
* 2. java.util.regx
* 3. String
* 4. StringTokenizer
*/
public class StringTokenizerTest {
public static void main(String[] args) {
String str = "java,jdbc,servlet/jsp,spring/JDBCTemplate";
StringTokenizer st = new StringTokenizer(str, ",/");
while (st.hasMoreTokens())
System.out.println(st.nextToken());
}
}
위 코드는 주어진 문자열에 따라 분리하는 코드를 짠 것이다.
람다식
1) 람다식의 주요특징 -> 함수형 인터페이스
익명 함수(Anonymous Function) 이름 없이 사용되는 함수로 함수형 인터페이스의 변수에 할당 가능.
함수형 인터페이스 : 하나의 추상 메소드만을 가지는 인터페이스를 말한다. -> @FunctionalInterface
람다식은 단 하나의 추상 메소드만을 가지는 함수형 인터페이스에서만 사용 가능하다.(default,static 메소드는 여러 개 가질 수 있다.)
간결한 코드 구조로 기존의 익명 클래스를 람다식을 사용하여 간단하게 표현할 수 있다.
자바 컴파일러가 문맥을 보고 타입을 자동으로 추론한다.
java.util.function 패키지에는 다양한 기본 함수형 인터페이스
(Function : 입력값을 받아서 가공한 후 다른 타입으로 변환하여 반환하는 인터페이스 R apply(T t),
Predicate: 입력값을 받아서 조건을 체크한 후 true 또는 false를 반환하는 인터페이스 boolean test(T t),
Consumer : 입력값을 받아서 특정 작업을 수행하고 반환값이 없는 인터페이스 void accept(T t),
Supplier : 입력값 없이 값을 생성하여 반환하는 인터페이스 T get())가 제공된다.
[람다 표현식 ]
lambda 표현식은 익명으로 처리되어 이름이 없다.
lambda 표현식은 compiler 가 context 에 맞는 타입을 유추하기 때문에 return type이없다.
lambda 표현식은 compiler 가 context 에서 유추되어 throws clause 가 없다.)
lambda 표현식은 람다 표현식은 Generic 이 될 수 없어 type 파라미터를 선언할 수없다.
2) 형식
(int x, int y) -> { return x + y; } // 기존 방식
(x, y) -> x + y // 타입 생략 가능
case1 : 매개변수가 없는 경우
() -> System.out.println("Hello World!");
case2: 매개변수가 하나인 경우
x -> x * x;
case 3: 매개변수가 여러 개인 경우
(x, y) -> x + y;
case4 실행문이 여러 개일 경우
(x, y) -> {
int sum = x + y;
return sum;
3) 다양한 형식
형식에 정의된 구문은 매개인자에 따라 괄호 () , 중괄호{}가 생략가능하다.
>> 매개인자로 su 을 받아 출력 하는 구문
(int su) -> { System.out.println(su); }
interface test {
public void test(int su); }
>> 자료형이 생략 가능하다.
(su) -> { System.out.println(su); }
>> 매개인자 하나일경우 (), {}생략 가능하다
su -> System.out.println(su);
>> 매개인자 없는 경우 빈 괄호()만 사용하여 명령 실행할 수 있다.
()->{ System.out.println('a')}
void에 매개인자 없음
>> 매개인자 두 개 이상 이면 자료형 생략 하여 실행한다.
(a, b) -> { return a + b; }
void가 아니고 매개인자 두 개 받음
>>매개인자 두 개이상이면 {}와 return 키워드를 생략해서 사용한다
(a, b) -> a + b;
ex)
package com.sec12.labmbda;
/*
* 1) 인터페이스의 추상 메소드가 무조건 하나여야 함
* 2) @FunctinalInterface가 없어도 위 조건을 만족하면 람다식 쓸 수 있음
*
*/
public class LambdaTest {
@FunctionalInterface //함수형 인터페이스 체크
interface Fun01{
public String prn(String name); // 매개인자 메소드
}
interface Fun02{
public String prn02(); // 매개인자 없는 메소드
}
interface Fun03 {
//반환형이 void인 메소드
public void say(String name); //문자열을 받아서 출력하는 메소드
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Fun01 m_name = name -> "hello" + name; //(name)괄호를 생략 -> : return 키워드 포함
System.out.println("m_name : " + m_name.prn("홍길동"));
Fun02 m_test = () -> "hello"; //{}와 return 키워드 생략 return "테스트";
System.out.println("m_test : "+m_test.prn02());
Fun03 m1 = (name) -> System.out.println("hello"+ name);
m1.say("정길동");
}
}
'🦁멋쟁이 사자처럼 15기 > 3월달 수업 내용 정리' 카테고리의 다른 글
멋쟁이 사자처럼 14회차 ( 03 / 18 ) (0) | 2025.03.18 |
---|---|
멋쟁이 사자처럼 13회차 ( 03 / 17 ) (0) | 2025.03.17 |
멋쟁이 사자처럼 12회 ( 03 / 13 ) (0) | 2025.03.13 |
멋쟁이 사자처럼 11회차 ( 03 / 12 ) (0) | 2025.03.12 |
멋쟁이 사자처럼 10회차 ( 03 / 11 ) (0) | 2025.03.11 |