원지의 개발
article thumbnail
728x90

 

1. JAVA API

: application programming interface

  • 미리 만들어진 기능인 라이브러리
  • API안에 많은 패키지들이 존재 (lang, util, IO 등)
메서드 모형 읽는 법
접근제어자 + (매개변수) + ;(결과) 반환 유형 - 클래스가 선언된 위치

접근제어자 구분
public private default protected

2. java.util 패키지

  • 자바 프로그램 개발에 보조 역할을 하는 클래스들을 담은 패키지
  • 컬렉션 관련 클래스들

3. Arrays

  • 배열 조작 기능
  • 순회(순서대로 접근, map), 복사(복사본에 작업 후 원본 덮기), 정렬, 검색, 필터링, 연산(reduce()) 등
    → 비교가 가능해짐
    ★ 정렬을 하려면 크기 비교하는 방법을 알아야 한다 ★
  • try ~ catch 잊지 말기

3.1. array 클래스의 주요 메서드

메서드 이름 내용 기타
copyOf (원본배열, 복사할길이) 원본 배열의 0번 인덱스부터 복사할 길이만큼의 인덱스까지 복사한 배열을 리턴  
clone() 복사 / Object 클래스  
copyOfRange (원본배열, 시작인덱스, 끝인덱스) 원본 배열의 시작 인덱스에서 끝 인덱스까지 복사 한 배열 리턴 시작 인덱스는 포함
끝 인덱스는 포함X
sort (배열) - 실습 확인 배열의 전체 항목을 오름차순(ascending) 정렬. 내림차순(descending)
으로 바꾸기 가능
binarySearch (배열, 찾는값) 전체 배열 항목에서 찾는 값이 있는 인덱스를 리턴 반드시 배열이 정렬되어있어야 함
fill (배열, 넣을값) 배열의 모든 요소를 지정된 값으로 채움  
equals(배열1, 배열2) 두 배열에 저장된 모든 요소를 비교 boolean
toString (배열) 배열의 값들을 "[값1, 값2,...]"와 같은 문자열 형식으로 리턴  
asList(Object... a) 배열을 List에 담아서 반환  
→ asList가 반환한 List의 크기를 변경X
→ 변경 가능하려면
     List list = new ArrayList(Arrays.asList(1,2,3,4,5));

3.2. 정렬 구현하는 방법

  1. 알고리즘을 직접 적용해서 정렬
    → 코딩 테스트에서는 퀵 정렬 필수 + 설명 가능해야 함
  2. API에서 제공하는 메서드 이용
    (각 요소 크기 비교가 가능하도록 정렬해야 함)

3.3. 예제

더보기

Test2

<java />
package _api.util.arrays; import java.util.Scanner; public class Test2 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); // 실수 문자열을 입력받아서 실수로 변경하고 출력하는 프로그램 System.out.println("실수를 입력하세요> "); String su = scan.nextLine(); try { // 실수 문자열을 실수로 변경 Double silsu = Double.parseDouble(su); // 실수를 문자열로 변환 String msg = silsu.toString(); System.out.println(msg); } catch(Exception e) { System.out.println("변환 실패"); } scan.close(); } }

ArrayTask

<java />
package _api.util.arrays; import java.util.Arrays; public class ArrayTask { public static void main(String[] args) { // 문자열 배열 생성 String [] arr = {"카리나", "아이린", "윈터", "조이", "슬기"}; // 배열을 순회하면서 출력 for(String singer: arr) { System.out.println(singer); //카리나 / 아이린 / 윈터 / 조이 / 슬기 } // 문자열의 크기 비교하는 메서드: compareTo, compareToIgnorecase System.out.println(arr[1].compareTo(arr[0])); // -2352 //선택 정렬 // 배열의 복제 String[] copyArr = Arrays.copyOf(arr, arr.length); // 첫번째부터 n-1번째 데이터 까지 for(int i = 0; i < copyArr.length; i++) { // 자신의 뒤에 있는 모든 데이터와 비교해서 for(int j = i+1; j < copyArr.length; j++ ) { // 뒤에 있는 데이터가 더 크다면(작다면) 교환 if(copyArr[i].compareTo(copyArr[j]) < 0 ) { String tmp = copyArr[i]; copyArr[i] = copyArr[j]; copyArr[j] = tmp; } } } System.out.println(Arrays.toString(copyArr)); // [카리나, 조이, 윈터, 아이린, 슬기] } }
  • 문자열 배열 생성 후 향상된 for문으로 배열을 돌면서 출력
  • String 배열 copyArr 생성 & 배열 복제
    String[] copyArr = Arrays.copyOf(원래 배열, 배열 길이);
  • 복사된 배열값 정렬: 이중 for문
    int i = 0 ~ copyArr.length -1 까지 (앞 데이터) int j = i+1 ~ copyArr.length -1 까지 (뒤 데이터)
    앞의 데이터가 더 작으면 음수 반환 → i와 j 교환하므로 오름차순 → 내림차순으로 변경
    if(copy[i].compareTo(copyArr[j]) < 0
    Strint tmp 변수 생성하여 배열값 바꿔주기 => 결과적으로 내림차순

PersonVO implements Comparable<PersonVO>

<java />
package _api.util.arrays; public class PersonVO implements Comparable<PersonVO>{ // generic private int num; private String name; private int age; // 매개변수가 없는 생성자 - Default Constructor 필수 public PersonVO() { super(); } // 속성을 전부 매개변수로 받는 생성자 - 인스턴스 생성 후 값을 빠르게 대입하기 위해서 생성 public PersonVO(int num, String name, int age) { super(); this.num = num; this.name = name; this.age = age; } // getter & setter - 속성의 값에 접근하고 변경하기 위한 메서드 // 일반적으로 VO 클래스의 경우는 setter를 만들지 않음 public int getNum() { return num; } public void setNum(int num) { this.num = num; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } // 데이터 출력을 편리하게 하기 위한 메서드 // 출력하는 메서드에 인스턴스 이름을 대입하면 이 메서드가 호출되서 출력됨 @Override public String toString() { // 3번 부를것 없이 toString()만 부르면 한꺼번에 나옴 return "PersonVO [num=" + num + ", name=" + name + ", age=" + age + "]"; } // 크기 비교하는 메서드: 정렬하기 위해서 사용 // @Override // public int compareTo(PersonVO o) { // 오름차순 // // 나이 비교 방법 설정 // return this.age - o.age; // 음수를 리턴하면 자리를 바꿈, 양수가 리턴=앞이 큼, 음수가 리턴=뒤가 큼, 0=같음 // } // @Override // public int compareTo(PersonVO o) { // 내림차순 // // 나이 비교 방법 설정 // return o.age - this.age; // 부호를 바꿔주면 됨, 이렇게 하던지 혹은 위의 메서드에서 *-1을 해주던지 // } // @Override // public int compareTo(PersonVO o) { // 오름차순 // // 문자열 비교 방법 설정 // return this.name.compareTo(o.name); // } @Override public int compareTo(PersonVO o) { // 내림차순 // 문자열 비교 방법 설정 return o.name.compareTo(this.name); } }
  • Generic 미리 사용
  • 멤버변수 생성, Default Constructor 생성, 매개변수가 있는 생성자 생성
  • VO class 특징
     Value Object 값 객체, 생성자를 통해 한 번 생성되면 이후에는 내부의 값을 변경할 수  없어야 함
    Setter를 허용하지 않음, 동등성 검사를 해야하면 각각의 값이 같으면 두 VO 객체는 동일하다고 판단함

PersonVO - Main

<java />
package _api.util.arrays; import java.util.Arrays; import java.util.Comparator; import java.util.Scanner; public class Main { public static void main(String[] args) { // 동적 - 바꿀수 있음 // 배열생성 PersonVO[] persons = {new PersonVO(1, "수지", 29), new PersonVO(2, "아이유", 30), new PersonVO(3, "카리나", 23), new PersonVO(4, "아담", 46), }; // 배열의 데이터 출력 System.out.println(Arrays.toString(persons)); } } --------------------------------출력--------------------------------- [PersonVO [num=1, name=수지, age=29], PersonVO [num=2, name=아이유, age=30], PersonVO [num=3, name=카리나, age=23], PersonVO [num=4, name=아담, age=46]]

PersonVO - 동적 Main

<java />
package _api.util.arrays; import java.util.Arrays; import java.util.Comparator; import java.util.Scanner; public class Main { public static void main(String[] args) { // 동적 - 바꿀수 있음 // 배열생성 PersonVO[] persons = {new PersonVO(1, "수지", 29), new PersonVO(2, "아이유", 30), new PersonVO(3, "카리나", 23), new PersonVO(4, "아담", 46), }; // Arrays.sort() 메서드는 배열을 대입하면 부등호 또는 compareTo 라는 메서드를 호출해서 // 크기 비교를 한 후 정렬을 수행해 줌 // Arrays.sort(persons); // 실행하면 예외발생 - PersonVO에는 크기 비교를 할 수있는 메서드가 존재하지 X // PersonVO 클래스에 크기 비교하는 메서드(Comparable)를 만들어서 비교 // 동적으로 크기 비교하는 메서드를 설정 // Arrays.sort(persons, new Comparator<PersonVO>(){ // // @Override // public int compare(PersonVO o1, PersonVO o2) { // // return o1.getAge() - o2.getAge(); // 오름차순 // return o2.getAge() - o1.getAge(); // 내림차순 // } // // }); // 동적으로 정렬하기 // 1.이름의 오름차순 2.이름의 내림차순 3.나이의 오름차순 4.나이의 내림차순 Scanner scan = new Scanner(System.in); System.out.println("1.이름의 오름차순 2.이름의 내림차순 3.나이의 오름차순 4.나이의 내림차순"); String menu = scan.nextLine(); switch (menu.trim()) { case "1": Arrays.sort(persons, new Comparator<PersonVO>(){ @Override public int compare(PersonVO o1, PersonVO o2) { return o1.getName().compareTo(o2.getName()); } }); break; case "2": Arrays.sort(persons, new Comparator<PersonVO>(){ @Override public int compare(PersonVO o1, PersonVO o2) { return o2.getName().compareTo(o1.getName()); } }); break; case "3": Arrays.sort(persons, new Comparator<PersonVO>(){ @Override public int compare(PersonVO o1, PersonVO o2) { return o1.getAge() - o2.getAge(); } }); break; case "4": Arrays.sort(persons, new Comparator<PersonVO>(){ @Override public int compare(PersonVO o1, PersonVO o2) { return o2.getAge() - o1.getAge(); } }); break; default: System.out.println("메뉴는 1-4번 중에서 선택하세요"); break; } scan.close(); // 배열의 데이터 출력 // Arrays.toString()은 배열의 각 요소의 toString을 전부 호출해서 // 하나의 문자열로 리턴하는 메서드 System.out.println(Arrays.toString(persons)); // 실제 해시코드 (해시코드는 운영체제가 결정함, ==는 해시코드를 비교하는 것) // System.out.println(System.identityHashCode(persons)); } }
  • Arrays.sort() 메서드 - 배열을 대입하면 부등호 또는 compareTo 라는 메서드를 호출해서 크기 비교를 한 후 정렬을 수행해 줌
  • Arrays.sort(persons); → 실행하면 예외발생 - PersonVO에는 크기 비교를 할 수있는 메서드가 존재하지 X
  • PersonVO 클래스에 크기 비교하는 메서드(Comparable)를 만들어서 비교

 

  • 실제 해시코드 (해시코드는 운영체제가 결정함, ==는 해시코드를 비교하는 것) System.out.println(System.identityHashCode(persons));
    <java />
    // 동적으로 크기 비교하는 메서드를 설정 Arrays.sort(persons, new Comparator<PersonVO>(){ @Override public int compare(PersonVO o1, PersonVO o2) { return o1.getAge() - o2.getAge(); // 오름차순 return o2.getAge() - o1.getAge(); // 내림차순 } });​

3.4. Search [검색]

3.4.1. 1. 순차 검색

데이터를 앞 → 뒤 순서대로 검색 (한 번만 할 경우 빠름)

3.4.2. 2. 제어 검색

★ 정렬(Array)한 후 검색(Search) ★ (여러 번 할 경우 빠름)

  1. Binary Search (이분 검색): 중앙값과 비교, 데이터가 존재하면 그 데이터의 위치를 리턴하고 존재하지 않으면 음수를 리턴 /  Arrays.toString()에 있음
  2. Fibonacci Search: 무조건 첫 시작은 1 1, 세 번째부터는 앞의 2개 행의 합(규칙은 3번째부터) /  1 1 2 3 5 8 13 ...
    - 재귀를 이용한 해결 - 시간이 오래 걸리지 않지만 이해하기는 쉬움
    - 재귀를 이용하지 X 해결 - 시간을 단축할 수 있지만 이해하기 어려울 수 있음
                                               은행에서 많이 사용
  3. Interpolation Search (보간 검색): 검색위치 계산
  4. 트리 검색: 이분 검색과 비슷(이분법은 딱 절반!) 데이터에 따라 좌우 균형이 안 맞을 수 있음
  5. 블록 검색: Block은 정렬되어 있지만 Block내부는 정렬하지 X. ex) 서점

3.4.3. 3. 해싱 검색

  • 해시함수 이용
{ 21,  14,  13,  10,  2 }
mod 5 → 5로 나눈 나머지
                    10 - 0 
                    21 - 1
                     2  - 2
                    13 - 3
                    14 - 4

계산을 한 번 하고, 들어가서 색인
무슨 검색을 하든지 검색 시간이 항상 같음
이미 있으면 저장하지 X
ex) 음악 어플

3.4.4. 실습

더보기

ArraysMain - 문자열 배열에서 문자열의 위치 찾기 [이분검색]

<java />
package _api.util.arrays; import java.util.Arrays; public class ArraysMain { public static void main(String[] args) { // 문자열 배열 생성 String[] singers = {"제니", "지수", "로제", "리사"}; // 이분 검색 수행 - sort를 하지 않아서 잘못된 결과가 리턴됨 int result = Arrays.binarySearch(singers, "로제"); System.out.println(result); // -1 // 데이터 정렬 Arrays.sort(singers); // 정렬한 데이터 확인 System.out.println(Arrays.toString(singers)); // [로제, 리사, 제니, 지수] int result2 = Arrays.binarySearch(singers, "로제"); System.out.println(result2); // 0 if(result2 >= 0) { System.out.printf("%s는 %d번째 존재\n", "로제", (result2+1)); // 로제는 1번째 존재로 바꿔서 이해할 수 있게끔 } else { System.out.printf("%s는 존재하지 않음\n", "로제"); } } } -------------------------------------------출력--------------------------------------------------- -1 [로제, 리사, 제니, 지수] 0 로제는 1번째 존재
  • Arrays.binnarySearch 하려면 우선 정렬이 되어 있어야 함
    정렬되지 않은 상태로 바로 result를 호출하면 -1로 잘못된 결과가 리턴됨
  • Arrays.sort로 오름차순 정렬
  • 정렬한 데이터 확인: Arrays.binarySearch(singers, "로제") 하고 println하면 인덱스 번호 출력
  • if 조건문으로 몇번째에 있는지 확인

RecursionFibonacci - 재귀 이용 (시간 오래 걸림)

<java />
package _api.util.arrays; public class RecursionFibonacci { // n번째 피보나치 수열의 값을 리턴해주는 메서드 public static int fibonacci(int n) { // 첫번째 와 두번째는 1 if(n == 1 || n == 2) { return 1; } // 세번째 부터는 앞의 2개의 항의 합 else { return fibonacci(n-1) + fibonacci(n-2); } } public static void main(String[] args) { // 시간제한이 있는 경우 재귀는 사용하지 않는게 좋음 System.out.println(fibonacci(100)); // 오버플로우 발생 } }
  • n은 자리값 n = 1, 2 일때는 1을 리턴
  • 세번째부터는 n-1 + n-2 앞의 두 항의 합
  • 하나씩 돌아가면서 리턴해주므로 시간이 오래 걸림 - 오버플로우 발생

NoRecursionFibonacci - 재귀 이용X (시간 단축)

<java />
package _api.util.arrays; public class NoRecursionFibonacci { // n번째 피보나치 수열의 값을 리턴해주는 메서드 public static int fibonacci(int n) { // 이전 항의 값과 이전의 이전 항의 값을 저장할 변수 int f1 = 1; int f2 = 1; // 피보나치 값을 저장할 변수 int fibo = 1; // 첫번째 와 두번째는 처리할 필요가 없어서 반복문을 세번째부터 적용 for(int i = 3; i <= n; i++) { fibo = f1 + f2; // 다음 부분 계산 준비 f2 = f1; f1 = fibo; } return fibo; } public static void main(String[] args) { System.out.println(fibonacci(10)); } }
  • 1, 2번째 값은 1이므로 f1, f2의 기본값은 1

다음 피보나치 값을 넣을 변수는 fibo 만들어서 fibo 값 리턴하고, f1은 f2에 fibo는 f1에 대입
반복

4. Date

  • java.util.Date
  • java.sql.Date  /  java.sql.Time
  • java.util.Calendar  /  java.util.GregorianCalendar
  • LocalDateTime

epoch time - 1970년 1월 1일

4.1. Java.util.Date

  • 1970년 1월 1일 자정을 기준으로 지나온 시간을 밀리초 단위의 long 타입으로 관리
  • 년도 설정할때는 1900년 이후 지나온 년수로 설정
  • 월을 설정할때는 1을 빼서 설정 (0부터 시작하기 때문)
  • toString메서드와 단위별로 추출하는 메서드 제공
  • 출력을 할때는 java.text.SimpleDateFormat 클래스와 같이 사용하는 경우가 많음
SimpleDateFormat sdf = new SimpleDateFormat("날짜 서식");
sdf.format(Date 객체)를 이용해서 날짜 서식이 적용된 문자열을 리턴받을 수 있음

년도 - yy, yyyy
월 - M, MM, MMM
일 - d, dd
요일 - E, EE, EEE
시간 - H, HH
오전/오후 - a (12시간제)
분 - m, mm
초 - s, ss
더보기

4.2. 실습

DateCreate

<sql />
package _api.util.arrays; import java.text.SimpleDateFormat; import java.util.Date; public class DateCreate { public static void main(String[] args) { // 현재 시간을 갖는 Date 인스턴스 생성 Date currentTime = new Date(); // 출력 System.out.println(currentTime); // 원하는 날짜를 가지고 생성: 19951116:08:00 으로 설정 // 원하는 년도 - 1900, 원하는 월은 하나 밀려서 -1을 해야 함 Date firstMeetingTime = new Date(1995-1900, 1-1, 1, 16, 8, 0); // 출력 - 년월일 시분초 출력 System.out.println(firstMeetingTime); // 년도 만 추출해서 출력, 웬만하면 쓰지 마라 System.out.println(firstMeetingTime.getYear() + 1900); // 원하는 포맷으로 출력 // 199511일 ?요일이라고 출력 SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 M월 d일 E요일"); System.out.println(sdf.format(firstMeetingTime)); Date LastdayTime = new Date(2022-1900, 10-1, 24, 10, 58, 0); Date TodayTime = new Date(2022-1900, 10-1, 25, 10, 58, 0); Date TodayTimeNow = new Date(); } }

# 연습해볼만 과제

=>년월일을 비교해서 년월일이 같으면 시간 과 분을 그렇지 않으면 년월일을 출력

4.3. Java.sql.Date / Java.sql.Time

  • 날짜와 시간이 분리된 클래스로 관계형 데이터베이스와 연동할 때 사용할 수 있는 클래스

5. Calendar

5.1. Java.util.Calendar / Java.util.GregorianCalendar

  • java.util.Calendar는 날짜 관련된 메서드를 가진 추상클래스 (abstract class: 인스턴스를 생성할 수 없는 클래스)
  • java.util.gregorianCalendar 클래스는 Calendar 클래스의 메서드를 구현한 하위 클래스
인스턴스 생성
Calendar calendar = new GregorianCalendar();

여러 종류의 생성자가 제공되서 날짜  및 시간을 설정해서 생성하는 것도 가능
Date 클래스에 비해서 많은 양의 정보를 제공

5.2. LocalDateTime

  • 최근에 데이터베이스의 날짜 및 시간 데이터에 매핑할 때 많이 이용하는 클래스
  • 을 계산할 때 -1을 하지 않아도 됨
  • 날짜와 시간 데이터를 많이 사용할 것 같으면 학습이 필요
<java />
package _api.util.arrays; import java.time.LocalDateTime; import java.util.Calendar; import java.util.GregorianCalendar; public class DateETC { public static void main(String[] args) { //날짜와 시간을 다른 형태로 사용하는 클래스 Calendar calendar = new GregorianCalendar(); //Date보다 많은 정보를 출력 System.out.println(calendar); //특정한 데이터를 조회 - 년,월,일 추출 //1월을 0부터 시작하므로, 필요시에 월의 값에 1을 더해줘야 함 System.out.println(calendar.get(Calendar.YEAR)); // 2022 System.out.println(calendar.get(Calendar.MONTH)+1); // 9+1 System.out.println(calendar.get(Calendar.DATE)); // 25 //최근에 많이 사용하는 날짜 타입 //LocalDateTime은 월-1을 하지 않음, 그냥 월 LocalDateTime meetingTime = LocalDateTime.of(2022, 10, 27, 18, 50); System.out.println(meetingTime); } } -------------------------------------출력------------------------------------ java.util.GregorianCalendar[time=1667122468143,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Seoul",offset=32400000,dstSavings=0,useDaylight=false,transitions=30,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2022,MONTH=9,WEEK_OF_YEAR=45,WEEK_OF_MONTH=6,DAY_OF_MONTH=30,DAY_OF_YEAR=303,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=5,AM_PM=1,HOUR=6,HOUR_OF_DAY=18,MINUTE=34,SECOND=28,MILLISECOND=143,ZONE_OFFSET=32400000,DST_OFFSET=0] 2022 10 30 2022-10-27T18:50


# 날짜와 시간에서 조금 더 학습해 볼만한 내용
=>Calendar 클래스 나 LocalDateTime 클래스에서 시간의 연산 부분(특히 뺄셈)
=>Calendar 클래스 나 LocalDateTime 클래스에서 지역이나 시간대 설정하는 부분


 

2023.09.01 - [프로그래밍 언어/Java] - [Java] Date, Calendar


6. Random

6.1. Random클래스

  • seed를 만든 후 seed에서 숫자를 하나씩 추출하는 클래스
  • 생성자()
    Random() seed를 현재 시간에 생성 - 어느 정도 랜덤 보장
    Random(long seed) seed를 고정 - 랜덤이 아니고 일정한 패턴의 숫자를 가져옴
  • 데이터를 추출하는 메서드
    next(자료형)
    nextInt(int n): 0부터 n보다 작은수까지 범위에서 추출

6.2. UUID

  • 랜덤한 문자열을 만들어주는 클래스
  • UUID.randomUUID().toString()을 이용해서 랜덤한 문자열을 만들어줌
  • 고유한 식별자를 생성할 때 주로 이용
사용이유
1. 실제로 ID를 만들기 위해
2. 사진 업로드를 할 때 중복되면 덮어씌우는데 파일 업로드 할 때 앞에 추가됨 → 중복 제거

6.3. 실습

더보기

RandomTest

seed를 사용하는 경우와 그렇지 않은 경우를 구분하고 배열 안에서 랜덤한 요소를 추출해보고 UUID 실행

<java />
package _api.util.arrays; import java.util.Random; import java.util.UUID; public class RandomTest { public static void main(String[] args) { //seed를 사용하지 않는 경우와 사용하는 경우의 차이 //여러번 실행해보고 확인 //java에서는 seed를 설정하지 않으면 seed가 랜덤 Random r = new Random(); System.out.println(r.nextInt()); //seed를 설정하면 고정된 패턴이 숫자가 리턴 r = new Random(42); System.out.println(r.nextInt()); // -1170105035 // r = new Random(); //윷놀이 int[] arr = {-1, 1, 2, 3, 4, 5}; for(int i = 0; i < 10; i++) { System.out.println(arr[r.nextInt(arr.length)]); } //메뉴 String[] menu = {"한식", "중식", "일식", "양식", "분식", "아시안식"}; for(int i = 0; i < 5; i++) { System.out.println(menu[r.nextInt(menu.length)]); } //주사위 게임 for(int i = 0; i < 10; i++) { System.out.println(r.nextInt(6) + 1); } //랜덤한 문자열 추출 System.out.println(UUID.randomUUID().toString()); // 57522c85-19fa-4757-b48a-8d7efa84fcf1 } }

오늘 하루

더보기

기억에 남는 부분

- Arrays 클래스의 메서드 사용방법

- search 검색은 정렬 후에 가능함. 정렬할 기준이 없는 경우 sort를 이용해야 함

 

어려운 부분

- 피보나치 수열에서 재귀를 이용하지 않고 해결하는 부분

- Array의 검색 부분 어디에서 써야할지 아직은 감이 잘 안옴

 

문제 해결 부분

- 날짜와 시간에서 해 볼만한 과제 아직 안해봄

 

728x90
profile

원지의 개발

@원지다

250x250