01. Java (v)
02. git
03. Database
04. Jsp [Server]
05. 미니프로젝트 (3W)
06. HTML,CSS
07. JS
08. SpringFramework , SrpingBoot
09. React JS [Front-end]
10. 중간프로젝트 (1M)
11. Linux 명령어
12. AWS 클라우드
13. DevOps - Docker
14. App - Android
15. 최종프로젝트 (1M)
Wrapper객체는 기본 타입의 값을 갖는 객체
Wrapper클래스
Boxing/ Unboxing
//boxing - 기본형 => 클래스형 으로 형변환
int a = 1;
double b = 3.14;
char c = 'A';
boolean d = true;
Integer val1 = new Integer(a);
Double val2 = new Double(b);
Character val3 = new Character(c);
Boolean val4 = new Boolean(d);
Object[] arr = {val1, val2, val3, val4};
//unboxing - 포장된 객체를 다시 기본타입으로 변환하는 작업
a = val1.intValue();
b = val2.doubleValue();
c = val3.charValue();
d = val4.booleanValue();
// AutoBoxing - 기본타입을 자동으로 클래스형으로 변환(반대도 가능)
// 기본타입 - 기본값 0 , 0.0 value
// 객체형타입 - 기본값 null
Integer val1=1; // String str ="...";
Double val2 = 3.14;
int a = val1;
Double b = val2;
// 래퍼 클래스는 유용한 기능들을 static메서드로 제공
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
문자열을 기본타입으로 바꾸는 방법
int result1 = Integer.parseInt("3");
double result2 = Double.parseDouble("3.14");
long result3 = Long.parseLong("30");
배열조작 기능을 가지고 있으며, 배열의 복사, 항목정렬, 항목 검색과 같은 기능을 제공
모든 메서드는 정적 메서드 이므로 클래스이름으로 바로 사용 가능
주요 메서드
[값1,값2,...]
와 같은 문자열 형식으로 리턴 // util패키지부터는 import 구문이 반드시 들어감
int[] arr = {65,34,23,63,88,1,25};
Arrays.sort(arr); //배열의 정렬
System.out.println(Arrays.toString(arr));
// 이진탐색에는 반드시 정렬이 필요하다.
int index = Arrays.binarySearch(arr, 34);
System.out.println("34가 있는 위치: "+index);
int index2 = Arrays.binarySearch(arr, 100);
System.out.println("찾는 값이 없으면 음수반환:"+ index2);
// 배열의 복사
int[] newArr = Arrays.copyOf(arr, arr.length);
System.out.println("복사된 배열:" + Arrays.toString(newArr));
// 배열의 복사 - 범위만큼만 복사
int[] newArr2 = Arrays.copyOfRange(arr, 0, 3);
System.out.println("범위지정복사 : "+Arrays.toString(newArr2));
// 배열의 내부요소가 동일한지 확인 equals()
if(Arrays.equals(arr,newArr)) {
System.out.println("배열의 요소가 같음");
}else {
System.out.println("배열의 요소가 같지 않음");
}
날짜를 표현하는 클래스로 객체 간에 날짜 정보를 주고받을 떄 주로 사용
기본 생성자로 생성하면 컴퓨터의 현재 날짜를 읽어 객체로 만듬
toString()메서드는 영문으로 된 날짜를 문자열로 리턴하는데 만약 특정 문자열 포맷으로 얻고 싶다면 java.text 패키지의 SimpleDateFormat 클래스를 이용
Date date = new Date();
System.out.println(date);
// SimpleDateFormat - 날짜형 -> 문자형 포맷
SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일(E요일) a hh시 mm분 ss초");
String result= sdf.format(date);
System.out.println(result);
// 실행 결과
// >> Tue Jan 21 11:26:58 KST 2025
// >> 2025년 01월 21일(화요일) 오전 11시 26분 58초
LocalDate / LocalTime / LocalDateTime 클래스
/*
* LocalDate 클래스 - 년 월 일
* LocalTime 클래스 - 시 분 초
* LocalDateTime클래스 - 년 월 일 시 분 초
*/
LocalDate nDate = LocalDate.now();
System.out.println(nDate);
LocalDate ofDate = LocalDate.of(2022, 2,12);
System.out.println(ofDate);
LocalTime nTime = LocalTime.now();
System.out.println(nTime);
LocalDateTime nDateTime = LocalDateTime.now();
System.out.println(nDateTime);
LocalDateTime ofDateTime=LocalDateTime.of(nDate, nTime);
System.out.println(ofDateTime);
// 로컬데이트 타임을 문자형으로 포맷
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일(E요일) a hh시 mm분 ss초");
String result2 = nDateTime.format(dtf);
System.out.println(result2);
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH)+1;
int day = cal.get(Calendar.DATE);
int hour = cal.get(Calendar.HOUR);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
System.out.printf("%d년 %d월 %d일 %d시 %d분 %d초\n",year,month,day,hour,minute,second);
난수를 얻어내기 위한 다양한 메서드를 제공하며 Math클래스의 random()메서드보다 다양한 난수값을 얻을 수 있음
주요메서드
// 랜덤 난수를 다양한 방식으로 제공
Random random = new Random();
double d = random.nextDouble();
System.out.println("0~1미만의 랜덤수:"+d);
int a = random.nextInt();
System.out.println("int범위의 랜덤수 : "+a);
int b = random.nextInt(10);
System.out.println("0~10미만 랜덤수: "+b);
// StringTokenizer클래스 - 특정문자를 기준으로 잘라서 사용(split과 유사)
String str1 = "오늘 날씨는 미세먼지가 많고, 매우 추워요";
// 자르는 문자 기준이 주어지지 않는다면 공백을 기준으로 문자열을 자름
StringTokenizer token1 = new StringTokenizer(str1);
System.out.println(token1.countTokens()); // 잘린 문자의 개수
// System.out.println(token1.nextToken());
// System.out.println(token1.nextToken());
// System.out.println(token1.nextToken());
// System.out.println(token1.nextToken());
// System.out.println(token1.nextToken());
// System.out.println(token1.nextToken());
// 다음이 있는지 확인하고 전진
while(token1.hasMoreTokens()) { // 다음이 있으면 true, 없으면 false
System.out.println(token1.nextToken());
}
System.out.println("-".repeat(30));
String str2 = "2025/01/21/월요일/홍길동/서울시";
StringTokenizer token2 = new StringTokenizer(str2,"/"); // 주어진 delimeter를 기준으로 문자열 자름
while(token2.hasMoreTokens()) {
System.out.println(token2.nextToken());
}
System.out.println("-".repeat(30));
String str3 = "2025.01.21/월요일/홍길동,서울시,마포구,강남구";
// ", . /" 기준으로 자름
// StringTokenizer token3 = new StringTokenizer(str3,",./");
// 구분자도 토큰에 포함시켜줌
StringTokenizer token3 = new StringTokenizer(str3,",./",true);
while(token3.hasMoreTokens()) {
System.out.println(token3.nextToken());
}
/*
*
* Object형으로 선언하면, 무엇이든 저장할 수 있는 장점이 있지만
* 반대로 값을 사용할 떄, 타입별로 형변환을 해야하는 문제가 발생
*
* 잘못 형변환하면 예외 발생
*/
Person<String> p = new Person<>();
p.setT("홍길동");
String name = p.getT();
//
//
Person<ABC> abc = new Person<>(); // 뒤에 <> 타입 생략가능
abc.setT(new ABC());
ABC a = abc.getT();
// <>를 안주면 마법의 상자처럼 동작
// Person p2 = new Person();
// 제네릭에는 기본타입이 저장될 수 없다
Person<Integer> p3 = new Person<>();
동적인 크기를 갖는다
는 장점Last In First Out
나중에 들어간 데이터는 먼저 나온다
push() 데이터 삽입, pop() 데이터 삭제
메서드
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
// 컬렉션을 문자열 형태로 보고 싶으면 toString메서드를 사용
System.out.println(stack.toString());
// pop 메서드는 값을 제거하면서, 제거한 값을 반환
int a = stack.pop();
System.out.println(a);
System.out.println(stack.toString());
// peek - 값을 제거하지 않고, 반환
System.out.println(stack.toString());
System.out.println(stack.peek());
System.out.println(stack.peek());
System.out.println(stack.peek());
// isEmpty - 스택이 비었으면 true, 아니면 false
if(stack.isEmpty()) {
System.out.println("스택이 비었음");
}else {
System.out.println("스택이 비어있지 않음.");
}
배열기반으로 만들어진 리스트
가장 평범하게 사용을 많이함.
인덱스(순서 o), 값의 중복 저장(o), 동적으로 크기를 조정함
메서드
//ArrayList<String> list = new ArrayList<>();
List<String> list = new ArrayList<>();
list.add("java");
list.add("database");
list.add("html");
list.add("git");
list.add("java");
// list를 문자열로 한눈에 확인
System.out.println(list.toString());
// list의 크기 확인
System.out.println("리스트 크기:"+list.size());
// list 중간에 값 추가
list.add(2,"css");
System.out.println(list.toString());
// list에서 값 얻기
System.out.println(list.get(2));
// list에 값이 포함되어 있는지 확인
if(list.contains("database")) {
System.out.println("database가 있음");
}else {
System.out.println("database가 없음");
}
// list에서 값 삭제
list.remove(0); // 인덱스
list.remove("git"); // 값
System.out.println(list.toString());
// list에 값 수정
list.set(0,"데이터베이스"); // 0번째를 수정
System.out.println(list.toString());
// 제네릭<?> - 무엇이든 다 들어 갈 수 있음.
// 제네릭<? extends String> - String이나, String의 자식타입은 전달가능
// 제네릭<? super String> - String의 형태를 가질 수 있다면 전달 가능
// 요소를 지정해서 리스트를 생성
List<String> newList=Arrays.asList("홍길동","이순신","홍길자");
list.addAll(newList); // 컬렉션<String> 전달 가능
System.out.println(list.toString());
// list 요소 전부 삭제
list.clear();
System.out.println(list.toString());