까먹고 헷갈릴 만한것만 정리.
오류
오류에는 두가지 종류가 있다. 에러와 예외.
- 에러(Error)
프로그램이 처리할 수 없기 때문에 에러발생 시 프로그램이 중단됨(ex. 네트워크 작업시 랜선이 끊어지는 경우)
- 예외(Exception)
프로그램 실행 중에 발생할 수 있는 가벼운 사건.
프로그래머가 충분히 예측할 수 있는 사건. 따라서 프로그램적으로 얼마든지 처리할 수 있다.
예외
예외도 객체로 처리해야 한다!
jvm이 프로그램을 실행하다가 예외가 발생하면 해당 예외상황에 해당하는 예외객체를 생성해서 프로그램에 던짐.
만약 프로그램에 예외처리 로직을 구현하지 않았다면? -> 기본 예외처리 핸들러가 처리함.
기본 예외처리 핸들러는 단순히 에러메시지를 화면에 출력하고 실행을 중지시키는 역할을 함.
예외 클래스
잡자는 예외 객체를 생성하기 위한 다양한 예외 클래스가 존재함.
모든 예외는 java.lang.Throwable 클래스의 자식인 java.lang.Exception클래스의 자식클래스로 만들어짐.
계층구도는 아래처럼 생김.
근데 RuntimeException의 자식클래스는 예외처리를 포함하지 않아도 컴파일이 됨. 왜냐면 RuintimeException은 실행시에 발생하는 예외라서, 컴파일러는 걍 컴파일 해주는 것임.
이 말은 반대로, RuntimeException이 아닌 예외클래스는 예외처리로직이 없으면 컴파일이 되지 않는단 것임.
즉, RuntimeException들만 이해하면 나머지 예외클래스들은 실행 전에 미리 예외처리 로직을 추가할 수 있게 강제됨.
throws
개념은 알기에 패스.
그러나 내가 몰랐던 게, throws를 생략도 할 수 있단 것임.
when? 발생된 예외객체가 RuntimeException의 자식클래스인 경우 명시적으로 throws문을 사용하지 않아도 throws가 된다! ㄷㄷ(여태 몰랐음)
9차시 java.lang 패키지
자바 api에는 엄청나게 많은 패키지들이 제공됨. 이 중 가장 기본이면서 중요한 패키지가 java.lang패키지이다.
Object클래스의 메서드 : equals()
== 연산자는 값을 비교하기 위해 사용되는데, 기본형은 변수가 값 자체를 가지고 있어서 값을 비교할 수 있지만, 참조형은 변수가 주소를 가지고 있어서 주소를 비교함.
이를 극복하기 위해 equals()가 나왔지만, 사실 equals()는 객체의 주소값을 비교하는 ==연산자와 동일하게 동작함.
Ojbect클래스에 정의된 equals()를 보면 아래처럼 되어있음.
즉, Object클래스를 상속한 모든 자식 클래스에서 equals() 메서드를 Overriding하지 않으면 결국 ==을 사용하는 것이라서, 주소가 아닌 내용을 비교하는 로직을 개발하려면 모든 클래스에 equals()를 적절하게 Overriding해야 함.
예) 아래처럼 Car클래스에 equals() 오버라이딩한 것임.
Object클래스의 메서드 : toString()
Object클래스의 toString()메서드 정의된건 아래와 같다.
toString()의 목적은 원래 객체의 변수값들을 보이기 위해서인데, 객체에다가 바로 쓰면 위에서 정의된 것 처럼 객체 코드값이 16진수 문자열로 나온다. 의도와 맞지 않음.
결국 toString()메서드 역시 적절하게 오버라이딩해서 사용해야 한다.
예)
Wrapper 클래스
자바는 8가지 기본 데이터타입을 객체로 사용할 수 있도록 지원함. 즉, 기본데이터 타입에 따른 객체를 지원하기 위해 각각의 데이터 타입과 관련된 클래스를 제공함.
특징: Wrapper클래스 객체는 한 번 생성되면 그 값이 변할 수 없다.
String
아니 내가 매일 쓰던 String클래스의 몰랐던 사실이 몇개 있다.
특징: 동일한 문자열을 가진 String이라면 같은 문자열이 저장된 주소 값을 재사용함.
- String클래스 이용하여 다양한 방법으로 문자열 생성하기
출력결과: Java Ja Program ABCDE
-그외 메서드
StringBuffer 클래스
변하는 문자열을 다룰 때 사용함. (즉, 한번 생성 후 문자열 내용 변경가능. String은 안됐었음)
StringBuffer 클래스의 객체는 크기가 동적임. 객체 생성시 지정하지 않아도 기본적으로 16개의 문자를 저장할 수 있는 버퍼공간을 가짐.
String과 StringBuffer 비교
String클래스의 concat과 StringBuffer의 append로 본 두 클래스의 차이
'개발삽질 > SSAFY하는 동안 기록' 카테고리의 다른 글
[일기] 싸피 트랙 변경 스토리(비전공 파이썬 트랙에서 전공자 자바트랙으로) (8) | 2022.02.05 |
---|---|
[SSAFY] 오티 : 마음가짐 (2) | 2022.01.07 |
[SWEA]자바 초급(2) - 7차시: 인터페이스와 패키지 (0) | 2022.01.01 |
[SWEA]자바 초급(2) - 5차시, 6차시: 상속, 내부클래스, 객체의 형변환 (0) | 2021.12.29 |
[SWEA]자바 초급(2) - 4차시: 메서드 오버로딩과 매개변수 (0) | 2021.12.29 |
댓글