좋은 기회로 다시한번 자바의 기초를 다질 수 있는 시간을 가져보았습니다.
인터페이스 vs 추상 클래스, 추상 메소드
추상 클래스, 추상 메소드 :
- 나를 상속한다면 이 기능은 꼭 구현해라! 라는 "강제"의 기능
인터페이스 : 껍데기만 존재함.
- 유사하지만 다른 클래스들을 같은 모양으로 사용하기 위한 기능.
- 티비이던 모니터이던 네비게이션이던 모니터에 보려주는 기능, 소리를 키는 기능등은 같은 모양(같은 형식의 인풋, 같은 형식의 아웃풋)으로 구현하기 위해 사용한다.
- 다중 상속이 가능
- 인터페이스의 선언한 것 들은 상수로 선언된다. (static)
- defalt 메소드 : 나중에 생긴 기능(자바 v8). 인터페이스 메소드들은 무조건 자손들이 구현을 해야 하므로 나중에 인터페이스에 기능 추가하고자 하면 자손들이 해당 추가 기능을 구현하기 전까지 컴파일 에러를 갖게 된다. 하여 이런거 있으면 좋아요의 권장용 메소드로 default 메소드가 있다. 필수 기능이 아닌 경우 default 메소드를 사용하면 좋다.
- 오버라이드(재정의) 가능. ( Like Object의 메소드들 )
- 인터페이스 내부 구현 가능.
- static 메소드 : (Use 인터페이스.메소드) default 메소드의 경우 부가적인 기능이라면, static의 경우 좀 더 의미 있는 기능들이다.
- 오버라이드(재정의) 불가능.
- 인터페이스 내부에 구현해야 한다.
예제참고 : https://dahyeee.tistory.com/entry/JAVA-interface-default-static%EB%A9%94%EC%86%8C%EB%93%9C
예외처리
발생할 예외들을 미리 예측하고 이에 따른 처리를 미리 해두는 것.
try-catch-finally : 자바의 가장 기본 예외처리 방법
- 존재하는 모든 에러를 처리하고 싶다면 Exception e를 사용.
- 다른 catch와 함께 Exception e를 사용한다면 이는 가장 마지막에 들어가야 한다.
throw : 예외를 강제 발생. 원하는 시점에 예외 발생을 시킬 수 있음. 자바가 이미 예외를 정의한 경우는 try-catch 문을 많이 사용.
- 예시 : 점수를 계산하는 프로그램을 만들고 싶은데 100점 만점 점수에 120점이 들어온 경우. 나는 이를 예외처리하고 싶다!
throws : 예외 상황 발생시 다른 이에게 처리하라고 미루는 방법. 보통 호출한 녀석에게 미룸.
* bad 예외처리 : catch block을 비워두는 것. 예외가 발생한 것도 알 수 없음....
자바 세상 태초의 객체 - Object
모든 객체는 Object를 상속 받는다.
- 가장 기본적인 약속들이 정의되어 있다.
- 굳이 없어도 되지만, 있으면 좋은 메소드를 Object가 많이 갖고 있다. 앞서 이야기한 default와 유사.
- Object의 메소드들은 추상메소드가 아니라는 의미
- 예를 들면 toString. 오버라이드하면 객체 이름만 주면 내용을 알 수 있게 된다.
- 많이 사용하는 메소드 : toString(), equals(), hashCode(), getClass(), clone()
STRING
불변 객체이다. 한번 생성된 문자열은 변경할 수 없다.
- 똑같은 문자열을 갖는 서로 다른 String 변수는 같은 주소를 가르킨다.
- ConCat() 같은 것을 쓰면 새로운 변수를 생성함.(String 함수중 문자열 조작 함수가 다 그럼..)
- equals()가 이미 오버라이드 되어 있음으로 그냥 사용하면 된다.
기타
* instranceof - 형변환전 확인 코드에서 많이 사용. 실제 인스턴스를 확인.
'IT' 카테고리의 다른 글
한국거래소 차세대는 왜 하는가? - Exture 3.0 (0) | 2023.01.20 |
---|---|
[JavaScript] let과 var 그리고 const의 차이점 (0) | 2021.05.11 |
[VI] 리눅스환경 vi, vim에서 ^M 제거 하기 (0) | 2021.05.07 |
[shell] 파일에서 테이블 리스트 읽어 행의 수(row수)를 세는 shell script만들어보기 (0) | 2021.05.03 |
구글의 텐서플로우 자격증 시험 후기 (0) | 2021.02.12 |