추상 클래스와 인터페이스의 공통점과 차이점
공통점
- 추상 메서드를 포함할 수 있다
- 상속을 통해 기능을 확장하고, 다형성을 지원한다.
- 클래스 간 관련성을 나타내는 용도로 사용할 수 있다.
차이점
- 추상 클래스는 추상 메서드 외에 일반 메서드, 인스턴스 변수를 포함할 수 있지만
반면 인터페이스는 추상 메서드, 디폴트 메서드, 정적 메서드, 상수만 가질 수 있다.
- 추상 클래스는 단일 상속만 가능하지만
인터페이스는 다중 상속이 가능하다.
- 인터페이스는 구현에 초점을 두지만
추상 클래스는 상속받아 기능을 확장하는 것에 초점을 둔다.
추상 클래스는 공통 속성을 상속하는 것이고
인터페이스는 어떠한 기능을 포함하고 싶을 때 사용하는 것이라는 설명이 가장 이해가 잘되는듯
추상 클래스 = 상속
인터페이스 = 구현
제네릭
제네릭은 컴파일 시점에서 타입을 안전하게 체킹하기 위해 지정하는 기능이다.
이 타입이 뭔지 지정하면 체킹할 때 이 타입과 다른 타입이 들어왔을 때 예외처리를 한다.
장점
- 타입 안전성 : 컴파일 시점에 타입 체크를 수행해 런타임 오류 방지.
- 재사용성 : 일반화된 타입을 사용해 여러 종류의 객체를 처리할 수 있음.
- 가독성 : 제네릭 사용 시 타입 정보가 명시되기 때문에 드의 의도가 명확해지고 가독성이 좋아짐.
제네릭 <>에는 Wrapper 클래스만 들어갈 수 있다.
Box<int> ==> X
Box<Integer> ==> O
public class Box<T> {
private T item;
public T getItem() {
return item;
}
public void setItem(T item) {
this.item = item;
}
}
Box<Integer> intBox = new Box<>();
intBox.setItem(10);
int value = intBox.getItem();
클래스/인터페이스 선언 시 타입 매개변수를 사용해 일반화된 타입을 지정.
제네릭 타입을 선언하면 객체 생성 시 타입을 구체화하여 사용 가능하다.
public <T> T getFirstElement(List<T> list) {
if (list.isEmpty()) {
return null;
}
return list.get(0);
}
List<String> stringList = new ArrayList<>();
stringList.add("Hello");
stringList.add("World");
String firstElement = getFirstElement(stringList);
메서드 선언 시 타입 매개변수를 사용해 메서드의 매개변수나 반환값의 타입을 지정한다.
제네릭 메서드 사용 시 메서드마다 타입을 지정해 다양한 타입의 인자와 반환값을 처리할 수 있음.
컬렉션
컬렉션이란 데이터 구조의 구현과 관련된 클래스로
자바에서 데이터를 저장, 관리 및 조작하는데 사용되는 API 집합이다.
컬렉션과 배열의 차이
- 크기 : 배열은 정적 크기 할당. 컬렉션은 동적 할당
- 타입 : 컬렉션은 제네릭을 사용해 컬렉션에 저장되는 요소의 타입을 지정할 수 있음
- 유연성 : 다양한 조작을 지원하며 검색, 정렬, 필터링, 반복 등의 편리한 연산 기능을 제공한다.
예외처리
예외에는 CheckedException과 UncheckedException이 있다.
CheckedException
CheckedException은 반드시 소스 코드 내에서 예외를 처리해야만 실행단계로 넘어간다.
즉 컴파일 단계에서 확인을 하기 때문에 반드시 예외처리를 구현한다는 조건이 붙음.
IOException, SqlException 등이 이에 해당한다.
UncheckedException
UncheckedException은 실행 단계에서 발생할 수 있는 모든 예외들을 말한다.
프로그래머의 실수에 의해 발생할 수 있는 예외라고 할 수 있다.
NullPointerException, IndexOutOfBoundException 등이 이에 해당한다.
'멋쟁이 사자처럼 > TIL' 카테고리의 다른 글
230531 7주 2일차 TIL. 컬렉션, DB 대소문자 구분, JDBC, 예외처리 (0) | 2023.05.31 |
---|---|
230530 7주 1일차 TIL. 프로그래머스 수열과 구간 2 (0) | 2023.05.30 |
230524 6주 4일차 TIL. SQL, BETWEEN, COUNT (0) | 2023.05.25 |
230524 6주 3일차. 템플릿 메소드 패턴. 의존성 주입 DI (1) | 2023.05.24 |
230523 6주 2일차 TIL. DAO, executeQuery, executeUpdate, Connection 분리 (1) | 2023.05.23 |