수정입니다
배열, 제네릭, 람다, 예외처리 본문
상속이란
부모 클래스에 있는 필드와 메소드를 자식 클래스에 물려주어, 자식 클래스에서 그대로 사용할 수 있게 하는 방식이다.
코드의 중복을 줄이기 때문에 효율적인 개발 방식.
public class Parent{
}
public class Child extends Parent{
}
부모에게 물려받은 것 뿐만 아니라, 자식 클래스에서 따로 추가할 수 있기 때문에 확장성이 좋다.
* 자바는 다중 상속을 허용하지 않는다.
자식 객체 생성 => 부모 객체 생성 => 부모 생성자 실행 => 자식 객체 생성됨 => 자식 생성자 실
오버라이딩이란
부모 클래스에서 상속받은 메소드를 자식 클래스에서 재정의 하는 것.
만약 자식 객체를 생성해서, 상속받은 메소드를 호출하면
1. overriding 시, 자식에서 바꾼 메소드가 실행
2. overriding x , 부모 객체까지 타고 올라가서 메소드를 실행
Overriding 조건
1. 메서드의 시그니처가 동일해야 한다.(return type, method name, parameter)
2. 접근 제한을 더 강하게 변경 불가 (public이었는데, private으로 변경 불가)
3. 새로운 예외를 throws 할 수 없음
다형성이란
사용 방법은 동일하지만, 실행 결과가 다양하게 나오는 성질.
자식 클래스 a가 부모 클래스의 method A를 overriding 한 것과
자식 클래스 b가 부모 클래스의 method A를 overriding 한 것은 결과가 다르게 나올 것.
똑같은 method A를 부모 클래스에서 생성했는데,
상황에 맞게 유연하게 객체를 생성할 수 있다는 것이 큰 장점
List<String> arr = new Arraylist<>();
List라는 interface에 여러 implements가 붙어서, 기본적인 List의 기능을 사용하되,
ArrayList에 맞는 추가 기능도 붙일 수 있다.
추가적으로 메서드에서 parameter 를 부모 타입으로 받으면,
어떤 자식 클래스의 객체가 와도 다형성에 따라 parameter로 사용할 수 있게 된다.
다운 캐스팅이란
Parent parent = new Child(); // upcasting
Child c = (Child) parent; // downcasting
업캐스팅이 선행된 후 다운캐스팅을 할 수 있다.
왜 쓰냐?
=> 부모 타입으로 자식 인스턴스를 생성하면 유연성이 커지지만,
변수의 타입 자체가 부모기 때문에, 자식 클래스에서 overriding한 것이나, 추가한 것을 사용하지 못한다.
따라서 다시 자식 클래스의 특성을 살리기 위해 다운 캐스팅을 진행한다.
추상 클래스란
직접적으로 객체를 생성하지 못하는, abstract class
abstract method를 하나라도 포함하고 있으면 abstract class가 되고,
abstract method를 포함하고 있지 않더라도 abstract class가 될 수 있다.
abstract class는 자식 클래스가 부모의 abstract method를 구현하고, 자식 클래스의 객체를 생성함으로서 사용할 수 있다.
자식들의 공통된 필드를 모아놓고 재사용하고 싶을 때 많이 사용.
인터페이스란
상속과 비슷한 개념이지만, 상속보다 좀 더 abstract한 개념
다형성 구현을 위해서 많이 사용함.
public interface A{
}
public class B implements A{
}
변수 타입으로 사용할 수 있으나, 상속과 마찬가지로 직접 객체 생성 불가
상수 필드와 method의 선언부만 가질 수 있다. ( abstract 생략 가능 )
제네릭이란
클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 타임에 미리 지정하는 방법
class MyArray<T>{
}
MyArray<Integer> myArr = new MyArray<Integer>();
T => 타입 변수, 임의의 참조형 타입
사용할 때 타입 명시 후 사용.
코드 재사용성 증가.
와일드카드
<?> => 모든 클래스, 인터페이스 가능
예외처리를 하는 이유는?
예외 => 에러가 아님, 고치면 예외상황에서 행할 행동을 정해줄 수 있음
try{
// 예외가 발생할만한 상황
}catch(Exception e){
// 발생했을 때 행동
}
trows 예외클래스 => 예외가 발생한 곳에서 처리하지 않고, 해당 메소드를 호출 한 곳에서 처리하도록 떠넘기는 기능
예외처리를 통해 프로그램 종료가 아닌 실행상태를 유지할 수 있음.
'동문네트워크' 카테고리의 다른 글
JPA를 통한 엔티티 설계, 매핑 & 프로젝트 파일 구조 이해 (0) | 2024.06.04 |
---|---|
API URL 설계 & 프로젝트 세팅 (0) | 2024.05.27 |
DB 설계, 실전 SQL (0) | 2024.05.10 |
<2주차> 객체, SOLID (0) | 2024.03.31 |
<1주차>깃 사용법, 자바 기초(반복문, 제어문), java, IntelliJ 세팅 (0) | 2024.03.22 |