jhhan의 블로그

Java의 정석을 시작하자(3)(2/6) 본문

JAVA

Java의 정석을 시작하자(3)(2/6)

jhhan000 2020. 2. 13. 11:23

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클래스 : 숫자를 형식화하는데 사용된다.

DecimalFormat클래스 예제

** 예제의 결과물을 출력한 것이다.

** 다양한 방법으로 표시할 수 있는 것을 볼 수 있다.

** 여기에 표시된 것 그 이외의 방법도 많이 있다.

 

-SimpleDateFormat클래스 : 날짜 데이터를 원하는 형태로 출력하는데 사용된다.

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