API : 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 한 인터페이스
String API
concat(추가할 문자열) : 문자열을 연결할 때
charAt(위치) : 문자열 중에서 특정한 위치의 글자를 가져오고 싶을 때
String.valueOf() : 모든 기본 자료형을 모두 문자열로 변경
spilit() : 문자열을 특정 토큰으로 분리
문자열과 배열
String str = "한글은"; char[] arr1 = str.toCharArray(); System.out.println(Arrays.toString(arr1));
Java의 성능 튜닝의 기본 String 대신 StringBuffer/StringBuilder를 이용, String은 immutable이라서 새로 만들어야 하지만 StringBuffer와 StringBuilder은 mutable이 이므로 변경가능함
StringBuilder를 써야 하는 경우 : 루프를 돌면서 문자열의 내용이 계속해서 변경되는 경우, '+'혹은 '+='와 같은 연산이 빈번하고 자주 사용되는 메소드인 경우, if ~ else에 의한 연산에 의해 문자열이 완성되는 경우(주로 SQL 문이나 명령어)
시간 관련 API
System.currentTimeMillis() : 현재 시각
Calendar 함수
선언 방법 2가지
Calendar cal1 = Calendar.getInstance(); Calendar cal2 = new GregorianCalendar();
데이터를 얻을 때는 get() - 월(month)는 0부터 시작하므로 월-1로 나옴
int year = cal1.get(Calendar.YEAR); int month = cal1.get(Calendar.MONTH); int date = cal1.get(Calendar.DATE);
데이터를 변경할 때는 set()
cal2.set(Calendar.YEAR, 2020); cal2.set(Calendar.MONTH, 0); // 1월 cal2.set(Calendar.DATE, 1);
요일을 얻을때는 Calendar.DAY_OF_WEEK - 1은 일요일
int day = cal1.get(Calendar.DAY_OF_WEEK);
말일이 몇 일까지인지를 확인할 때는 getActualMaximum()
int lastDay = cal2.getActualMaximum(Calendar.DATE);
Math.random()과 Random 클래스의 차이 : Math.random()은 double에 해당되는 임의의 실수를 발생시킴, Random 클래스는 난수 발생 시에 사용하는 seed 값을 지정할 수 있고, 추가 메소드가 있음
java.util.Scanner를 사용하면 편리한 경우 : 키보드에서 들어오는 문자열을 간편하게 String으로 얻는 경우 출력, 파일에서 문자열 데이터를 읽어들이는 경우, 입출력 프로그래밍에서 문자열로 데이터를 읽어내는 경우
정확한 소수 사용은 BigDecimal
System.out.printf(); : 데이터의 포매팅 기능
%d : 10진수를 표시(o:8진수, x:16진수)
%s : 문자열 출력
%S : 대문자로 문자열 출력
%.3f : 소수점 3자리
%tY : 4자리 수로 나오는 년도
%ty : 2자리 수로 나오는 연도
%tm : 2자리 수로 표현되는 월
%td : 날짜를 두 자리로 표현
%tA : 요일, 생략하지 않은 요일(월요일 등)
%ta : 짧게 표현되는 요일
DecimalFormat df = new DecimalFormat("#000.00#");
- '#'은 없으면 출력하지 않고, 있으면 출력한다.
- '0'은 없으면 무조건 0으로 채운다.
예외 처리
에러와 예외를 구분하는 기준 : 에러는 발생하면 개발자가 어떻게 조치할 수 없는 수준(메모리 부족), 예외는 JVM은 정상적으로 동작하고 있기 때문에 다른 방식으로 처리하는 것
Exception의 두 가지 종류
- Checked Exception : 예외 처리를 하지 않으면 컴파일을 허락하지 않는 예외, 주로 외부 리소스와 통신하는 경우는 반드시 Checked Exception이라고 생각
- Unchecked Exception : 컴파일 시에 체크되지 않고, 실행 시에 발생하는 Exception을 말함
java.lang 패키지 상속의 구조 :
Throwable
-Exception : 개발자가 처리할 수 있는 상황
-Error : 개발자는 어찌 할수 없는 불가항력적인 상황
자주쓰는 메소드 : printStackTrace() - 발생한 Exception의 출처를 메모리상에서 추적하면서 결과를 알려줌 리턴 타입이 void이므로 메시지를 다른 방식으로 응용할 수 없음, getMessage() - 한줄로 요약된 요약 메시지를 String으로 반환해줌, getStackTrace() - printStackTrace() 보완으로 jdk 1.4부터 지원 StatTraceElement라는 객체들의 배열로 printStackTrace()의 결과를 객체화시켜줌
예외 처리의 중요한 두가지 : 예외는 객체로 처리되고 모든 예외는 Exception이라는 클래스의 하위 클래스이므로 Exception a = new XXXException(); 과 같은 상속 구조를 이용하여 처리, Exception의 메소드는 printStackTrace()가 가장 많이 사용됨
주로 연결을 종료하는 작업은 finally
throws : 메소드의 선언부에서 어떤 종류의 예외들이 던져질 것인지를 명시
throw : 직접 예외 객체를 발생시켜 코드 바깥으로 예외를 던질때
데이터의 저장 형태에 따른 자료구조 용어 : 리스트 - 순서를 가지고 있으며, 중복을 허용하는 보관 구조, 세트 - 순서를 가지지 않고, 데이터의 중복을 허용하지 않는 구조, 맵 - 키와 값을 가지며, 키를 가지고 원하는 데이터를 검색하는 구조
자료구조
배열의 단점 : 1. 처음 만들 때 크기를 고정해주어야 함 2. 접근하려면 반드시 인덱스 번호를 알아야함 3. 항상 배열 안의 범위에서 인덱스 번호로 접근해야만 함 4. 자료 검색할 때 사용하고 싶으면 equals()메소드를 구현해야함
List 자료구조의 대표 클래스 : ArrayList - 단방향 포인터 구조로, 순차적인 접근에 빠른 성능을 보임, LinkedList - 양방향 포인터 구조로 빈번한 데이터의 삽입, 삭제에 빠른 성능을 보임, Vector - ArrayList와 동작 방식은 같지만 속도가 느리고 멀티스레드에 대해서 좀 더 안전함
ArrayList에 데이터 추가 방법 : add(요소), add(인덱스, 요소), set(인덱스, 요소)
ArrayList에 데이터 꺼낼때 및 삭제 : get(인덱스), remove(인덱스)
해쉬맵의 특징 : 1. 키는 유일해야 함 2. 맵에는 순서가 없음 3. hashCode(), equals() 구현하면 좋음
순서 없는 주머니 Set의 특징 : 순서가 없음, 데이터의 중복을 허용하지 않음, hashCode(), equals() 구현하면 좋음
add() : HashSet의 데이터 넣는 메소드
remove() : HashSet의 삭제 메소드
Tree : 정리를 하는 데이터 - comparable, comparator사용해서 정렬할 수 있음
stack : 장작더미 쌓기 처럼 최신 데이터 빠르게 LIFO(Last In First Out)
주요 기능 : push(요소) - 데이터를 밀어 넣음, pop() - 맨 마지막에 들어간 데이터의 레퍼런스를 반환해주고, 자료구조에서는 삭제함, peek() - 맨 마지막에 들어간 데이터의 레퍼런스 반환 pop()과는 다르게 삭제가 일어나지 않음
Iterator : 데이터를 일렬로 나열하는 역할
hasNext() : 뒤에 남은 데이터가 있으면 true, 없으면 false
next() : 다음 데이터를 반환
remove() : 객체의 레퍼런스를 삭제
Enumeration : Iterator과 거의 유사
hasMoreElements() : hasNext()와 같음
nextElement() : next()와 같음
자료구조의 정렬 : Comparable, Comparator 인터페이스
Collections.sort() - String을 사용하여 간단하게 정렬, Collection 클래스는 모든 메소드가 static으로 선언되어 있음
Collections.reverse() - sort의 정렬된 기준을 뒤집음
Comparable 인터페이스의 메소드 - compareTo(to) 비교해서 같으면 0 앞으로 가야하면 음수 뒤로 가야하면 양수 반환
Comparator 인터페이스의 활용 - 단순히 하나의 기준이 아니라 다른 기준으로 정렬하고 싶다면 Comparator로 기준을 만들면 됨 compare(T o1, To2) - compareTo와 비슷함, equals(Object obj)
댓글
댓글 쓰기