일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Singleton
- js
- 프로토타입
- Security
- HTTP
- dependency injection
- vuex
- JPA
- javascript
- BEAN
- 의존성 주입
- 싱글톤
- vue-cli
- HTTP 메서드
- Setter
- 라이프 사이클
- DB
- di
- Java
- thymeleaf
- cache
- Kotlin
- 로그인
- Spring
- VUE
- 캐시
- Excel
- Repository
- Stateless
- Vue.js
- Today
- Total
jhhan의 블로그
Java의 정석을 시작하자(3)(2/6) 본문
8장 예외처리 부분을 이어서 나갈 것이다.
-메서드에 예외 선언
- 키워드 throws를 사용해서 예외 선언을 할 수 있다.
- 여러 개일 경우 쉼표를 이용해서 구분한다.
- ex) void method() throws Excpetion1, Exception2, ... { /*메서드의 내용*/ }
- 예외를 처리하는 또 다른 방법이다.
- 오버라이딩시 상속관계 고려
- 호출한 메서드가 예외처리를 해야 한다.
- 어쨌거나 예외 처리를 하는 구문을 작성해야 한다.
** 예외 선언을 하는 예제이다.
* 예외가 발생했을 때 모두 3개의 메서드가 호출스택에 있었다.
** 예외가 발생할 곳은 method2()이다.
** main메서드가 method1()을, method1()은 method2()를 호출했다는 것을 알 수 있다.
-예외 되던지기(Exception Re-throwing)
- 예외 처리 후 다시 예외 생성 -> 호출한 메서드로 전달
- 예외가 발생한 메서드와 호출한 메서드, 양쪽에서 처리해야 할 때 사용한다.
** method1과 main메서드 양쪽의 catch블럭이 모두 수행되었다.
** 밑의 결과물과 같이 출력된다.
-연결된 예외(chained Exception)
- 예외1이 예외2를 발생시킨다면 -> 1을 2의 '원인 예외'라고 한다.
- 여러가지 예외를 하나의 큰 분류의 예외로 묶어서 다루기 위함
- 예외가 원인 예외를 포함할 수 있게 한다.
- 두 예외는 상속관계가 아니어도 상관없음.
9장. java.lang패키지와 유용한 클래스
-Object클래스
- 모든 클래스의 최고 조상.
- 멤버변수는 없고, 11개의 메서드를 가지고 있다.
- equals(), hashCode(), toString()은 오버라이딩 할 수 있다.
-equals() 오버라이딩
** Person클래스에서 equals()를 오버라이딩해서 사용했다.
** p1과 p2는 서로 같은 id를 가지므로 오버라이딩을 제대로 했다면 같은 사람으로 출력된다.
** 실제로 밑에 그림과 같이 출력된다.
-toString() 오버라이딩
** Card클래스에 toString()을 오버라이딩했다.
** 그 결과 내가 원하는 값을 출력하도록 할 수 있었다.
-String클래스
- 빈 문자열 : 크기가 0인 배열을 생성하는 것과 같음.
- String의 기본값은 빈 문자열, char형은 공백으로 초기화 하는 것을 권장.
- String인스턴스의 내용은 바꿀 수 없음.
- 따라서 문자간의 결합횟수를 줄이는게 좋음.
- 문자간의 결합이 많을 경우 StringBuffer클래스 사용할 것.
- join() : 여러 문자열 사이에 구분자를 넣어서 결합
- StringJoiner클래스를 사용해서 결합할 수도 있다.
** join과 StringJoiner 예제이다.
** split()으로 나눈 다음 join()으로 묶었다.
** StringJoiner클래스를 사용해서 묶었다.
** 아래는 그 결과이다.
-문자열과 기본형 간의 변환
- 기본형 -> 문자열 : 2가지 방법 존재
- 변수명 + "";
- valueOf(변수명); // 2번째 방법이 성능이 더 좋다.
- 문자열 -> 기본형 : parseInt(), parseFloat() 같은 메서드 사용
- 단, 문자열 -> 기본형 변환시 예외 발생이 쉬워 주의가 필요함.
** 기본형->문자열, 문자열->기본형으로 변환하는 예제이다.
** parseInt() 같은 메서드 사용시 공백이나 문자가 포함되어 있으면 예외가 발생하기 쉬우므로 주의해야 한다.
** 결과를 출력했을 때이다.
-StringBuffer클래스
- 문자열을 편집해야 할때 사용
- 인스턴스 생성 시 버퍼의 크기를 충분히 한다.
- equals() 오버라이딩을 하지 않기 때문에 사용할 수 없다.
- 대신 toString()이 오버라이딩 되므로 String인스턴스로 변환 후 equals()를 사용할 수 있다.
** StringBuffer의 생성자와 메서드를 이용한 예제이다.
** StringBuffer로 추가, 변경, 삭제 등을 자유롭게 진행했다.
** 밑에는 결과를 출력한 것이다.
-Math클래스
- 수학계산에 유용한 메서드 포함
- 메서드는 모두 static이다.
- 자연로그의 밑인 E와 원주율 PI, 2개의 상수만 정의되어 있다.
-래퍼(wrapper)클래스
- 기본형을 클래스로 정의했다.
- 기본형 값도 객체로 다뤄야 할 일이 있기 때문이다.
- ex) int -> Integer, long -> Long, ...
- 내부적으로 기본형 변수를 가진다.
- equals() 오버라이딩이 되기 때문에 값을 비교할 수 있다.
** wrapper클래스의 예제이다.
** equals()가 오버라이딩 되어 있어서 사용할 수 있다.
** 비교연산자 대신 compareTo()를 사용한다.
-Nubmer클래스
- 숫자를 멤버변수로 갖는 클래스의 조상
- 추상클래스이다.
- 자손으로 숫자와 관련된 래퍼클래스 외에 BigInteger, BigDecimal도 있다.
-오토박싱, 언박싱
- 오토박싱 : 기본형 값을 래퍼클래스 객체로 자동변환
- 언박싱 : 오토박싱의 반대
- 기본형과 참조형 간의 형변환과 연산을 수행하게 해준다.
- 컴파일러가 제공하는 편리한 기능일 뿐이다.
10장. 날짜와 시간 & 형식화
-Date & Calendar클래스
- Date클래스 : 날짜와 시간을 다루게 해준다.
- 현재는 대부분 Deprecated되었다.
- Calendar클래스 : Date클래스를 개선
- 하지만 여전히 단점이 존재
- java.time패키지에 기존의 단점을 개선한 새로운 클래스들 추가
- 하지만 여전히 Date, Calendar는 많이 사용되고 있다. 그래서 알아둬야 할 필요성이 있다.
-Calendar클래스
- 추상클래스이다.
- 메서드를 통해 완전히 구현된 클래스의 인스턴스를 얻어야 한다.
- ex) Calendar c = Calendar.getInstance(); // 이렇게 선언해야 한다.
- get() : 날짜와 시간 필드 값을 가져옴
- set() : 날짜와 시간을 직접 지정
- clear() : 모든 필드 초기화
- 오늘을 기준으로 여러 메서드들을 사용해보았다.
** 결과를 출력한 것이다.
** 월의 경우 0~11사이의 값이 출력된다. -> 0이면 1월, 11이면 12월을 뜻한다.
** 2020년 2월 13일(오늘)을 기준으로 출력이 되었다.
-형식화 클래스
- 형식화에 사용될 패턴 정의
- 사용할 패턴을 미리 정의해 둘 수 있다.
- ex) DecimalFormat클래스, SimpleDateFormat클래스
-DecimalFormat클래스 : 숫자를 형식화하는데 사용된다.
** 예제의 결과물을 출력한 것이다.
** 다양한 방법으로 표시할 수 있는 것을 볼 수 있다.
** 여기에 표시된 것 그 이외의 방법도 많이 있다.
-SimpleDateFormat클래스 : 날짜 데이터를 원하는 형태로 출력하는데 사용된다.
** 예제의 결과물을 출력했다.
** 여기 이외의 방법으로도 표시할 수도 있다.
11장 컬렉션 프레임웍도 나갔지만 중요한 부분인 것 같으니 다음 글에 쓸 것이다.
'JAVA' 카테고리의 다른 글
Java의 정석을 시작하자(4)(2/7) (0) | 2020.02.14 |
---|---|
Java의 정석을 시작하자(4)(2/7) (0) | 2020.02.13 |
Java의 정석을 시작하자(2)(2/5) (0) | 2020.02.12 |
Java의 정석을 시작하자(1)(2/3~2/4) (0) | 2020.02.12 |
Java를 시작하면서 (0) | 2020.02.12 |