프로그래밍 공부

2025.01.24 java 공부

3452 2025. 1. 24. 17:48

Scanner

 

스캐너 클래스는 문자데이터를 읽어오는데 도움을 주는 클래스이며, 다양한 소스로부터 데이터를 읽어 올 수 있다.

 

Scanner(File file)

Scanner(InputStream source)

Scanner(String source)

Scanner(Readable source)

 

위와 같은 데이터타입 매개변수들이 준비되어있다.

 

Scanner sc = new Scanner(System.in); // 스캐너 생성

System.out.println("이름을 입력하세요"); // 안내문구 출력

String name = sc.nextLine(); // 스캐너로 입력된 값을 name에 저장

 

System.out.println(name + "님 환영합니다."); // 입력받은 name 변수를 이용해 출력

 

여기서 nextLine()은 스캐너 메서드로, 입력받은 문자열 한줄을 읽고 반환하는 역할을 한다.

 

비슷한 메서드로는 next데이터타입()의 형태로 오는것들이 있으며, 반환 값의 데이터타입만 다르다.

 

 

hasNext()는 다음줄을 읽고 값이 존재하면(-1이 아니면) 계속해서 반복하는 역할을 한다.

 

FileInputStream fis = new FileInputStream("src\\sample.txt"); // src폴더 안에있는 sample.txt 파일의 주소를 fis에 저장

Scanner s = new Scanner(fis); // fis를 통해 스캐너로 sample.txt에 접근

while(s.hasNext()) { // 다음줄에 값이 존재하면 true

System.out.println(s.nextLine); // sample.txt를 읽고 반환해서 출력

}

 

 

Timer/TimerTask

 

개발자가 원하는 특정한 시간에 코드를 실행하거나 특정 시간 간격으로 반복되는 작업을 할 수 있게 해준다.

 

첫번째로 뭔가를 실행할 클래스는 TimerTask를 상속받고, run() 메서드에 실행할 코드에 대해 오버라이딩 한다.

 

두번째로 Timer 클래스와 TimerTask 클래스를 객체 생성하고,

 

이때 TimerTask 클래스와 실행클래스는 다형성 형태로 객체생성한다.

 

Timer t = new Timer(true); // 타이머 객체생성

TimerTask w1 = new Work1(); // 실행 클래스 객체생성

 

Timer매개변수 t.schedule(TimerTask 매개변수, 밀리초); 의 형태로 구성한다.

t.schedule(w1, 5000); // 5초 후에 w1 실행

 

 

Timer/TimerTask의 주요 메서드는

 

schedule(a, b) : a를 b밀리초 후에 실행

Thread.sleep(a) : a 밀리초 만큼 종료하지 않고 스레드 기다리기

 

스케쥴은 말 그대로 a라는 행동을 b밀리초 후에 하는것이고,

 

Thread.sleep()은 단순히 기다리게 하는것이지만

 

for문과 같은 반복문과 함께 이용하면 for이 순회하는 시간을 조절하여 1초에 한번 for문이 돌게 할수도 있고,

 

이를 이용해 카운트 다운으로 활용할수도 있다.

 

 

formatting

 

String[] pattern = {//패턴의 배열}을 만들어서 문자열을 변환하는 기능이다.

 

만약 패턴이 "####.####", "0000.0000"이고

 

여기다가 123, 123.4, 1234.567을 대입한다면

 

#의 경우에는 숫자가 존재하면 채워넣고, 존재하지 않으면 빈칸으로 둔다.

 

따라서 123, 123.4, 1234.567이 출력되고,

 

0의 경우에는 숫자가 존재하면 채워넣고, 존재하지 않으면 0으로 채운다.

 

따라서 출력은 0123.0000, 0123.4000, 1234.5670이 된다.

 

보통 formatting은 잘 사용하지 않지만

 

한국에선 돈을 나타날때 주로 세자리 마다 콤마 , 를 넣어서 구분하는 경우가 많다

 

이를 formating을 이용해 쉽게 구현할수 있다.

 

패턴을 "###,###,###,###,###,###,###,###"으로 둔다고 가정하면,

 

#은 비어있으면 출력되지 않기 때문에

 

1000을 넣으면

 

1,000이 출력되고

 

1000000을 넣으면

 

1,000,000이 출력되게 된다.

 

이는 대표적인 formatting의 사용처이다.

 

 

Object 클래스

 

모든 클래스의 조상클래스이며, 모든 클래스는 Object 클래스의 메서드를 상속받아 사용할수 있다.

 

주로 사용하는 Object 클래스의 메서드로는

 

equals()와 toString()이 있으며,

 

equals()는 같은 객체인지 아닌지 boolean 값으로 반환하여

 

주로 String과 같은 문자열끼리의 비교에 쓰이고, (by reference)

 

toString()은 Object 클래스의 메서드로 일반 클래스에서 toString()을 오버라이딩해서 사용하면

 

객체의 정보를 문자열로 반환해주는 역할을 한다.

 

 

 

time 패키지

 

JDK1.8부터 추가된 패키지로, 기존에 사용했던 Date나 Calendar를 보완하여 편리하게 시간과 날짜를 표현한다.

 

타임패키지의 하위패키지들은 java.time, java.time.format, java.time.chrono, java.time.temporal, java.time.zone등이 있으며, 이 패키지들은 시간과 날짜에 대한 API를 다수 포함하고 있지만

 

클래스들은 불변 속성이 있기 때문에 날짜와 시간을 변경했더라도 실제로는 변경한것이 아니라 새로운 객체를 반환하는것이다.

 

 

클래스들의 정보값 읽어오기

 

LocalDate와 LocalTime 클래스는 날짜와 시간에 관련된 정보를 메서드를 통해 읽어오는데,

 

Calendar 클래스와는 다르게 월요일 ~ 일요일을 1~7로 보고, 1월을 1 이라고 표현한다는 차이점이 있다.

 

메서드

 

LocalDate의 대략적인 메서드

 

getYear() 년도를 불러온다

getMonth() 월을 불러온다

 

 

LocalTime의 대략적인 메서드

 

getHour() 시간을 불러온다

getMinutes() 분을 불러온다

 

위와 같이 Calendar에 비해서 메서드들의 이름이 매우 직관적으로 바뀌어 날짜와 시간을 관리하기 더 편해졌으며,

 

미국기준으로 맞춰져있던 Calendar와는 달리 한국에서 주로 사용하는 방식인 월요일~일요일을 1~7로, 1월을 0이 아닌 1로 표현하는등 많은 개선점이 있다.

 

 

클래스들의 정보 더하기 / 빼기

 

기존에 Calendar에서 시간을 더하거나 빼려면 밀리초를 불러와서 빼고 다시 그걸로 초/분/시/일을 일일히 구해야했지만, Time패키지에서는 자체적으로 날짜와 시간을 연산하는 메서드를 지원한다.

 

minusYears(long) 년도 빼기

minusMonths(long) 월 빼기

 

plusYears(long) 년도 더하기

plusMonths(long) 월 더하기

 

일부 메서드만 기입하였지만 대응하는 년도, 월, 일, 시간, 분, 초, 나노초까지의 모든 연산을 지원한다.

 

연산을 할때는 먼저 LocalDate ld = LocalDate.now();를 이용해서 현재 시간을 구하고나서

 

연산을 ld.minusYears(3).plusMonths(5); // 현재 날짜에서 3년을 빼고 5개월을 더한다.

 

위와같이 매우 간단한 방식으로 할수가 있다.

 

 

클래스들의 정보 값 변경하기

 

각 클래스에는 필드 값들을 변경할 수 있는 메서드 또한 존재한다.

 

withYear(int) 년도를 int로 변경

withMonth(int) 월을 int로 변경

withHour(int) 시간을 int로 변경

 

위의 메서드를 포함하여 년, 월, 일, 년의 일, 시간, 분, 초, 나노초등의 메서드도 존재한다.

 

또한 with 메서드는 TemporalAdjuster 타입을 인자로 받게되면 특정한 날짜를 리턴하게 되는데

 

firstDayOfYear() 년도의 첫번째 일

lastDayOfYear() 년도의 마지막 일

previous(DayOfWeek dayOfWeek) 지난 요일

 

등을 포함한 날짜와 시간에 대한 여러가지 메서드들을 지원하는 패키지이다.

'프로그래밍 공부' 카테고리의 다른 글

2025.02.04 java 공부  (0) 2025.02.04
2025.02.03 java 공부  (0) 2025.02.03
2025.01.23 java 공부  (0) 2025.01.23
2025.01.22 java 공부  (0) 2025.01.22
2025.01.21 java 공부  (0) 2025.01.21