객체를 생성할 필요 없이 클래스를 통해 바로 사용이 가능
정적 요소는 클래스 이름으로 접근하는 것이 정석
패키지는 주로 개발 회사의 도메인 이름의 역순으로 만든다.
중요한 필드와 메소드가 외부로 노출되지 않도록 해 객체의 무결성(결점이 없는 성질)을 유지하기 위해 - 캡슐화
접근제한자 - 제한 범위
public - 없음
protected - 같은 패키지 or 자기 객체
(default) - 같은 패키지
private - 객체 내부
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
우리는 보통 new 명령어를 통해 인스턴스를 생성해서 사용합니다. new 를통해 IDCard 클래스를 10번 호출하면 10개의 IDCard 인스턴스가 생기는 것이죠.
그런데 클래스의 인스턴스가 단 하나만 필요한 경우가 있습니다. 시스템 안에서 하나의 인스턴스만 생성되서 사용 돼야하는 클래스들인데, 예를 들면 회사 내의 공공재로 사용하는 프린터나 컴퓨터 등이 그렇습니다. 우리가 원한다고 마음대로 new를 통해 생성할 수도 없습니다.
물론, 조심해서 new를 한 번만 사용해서 1개의 인스턴스만 사용하겠다고 할 수도 있지만, 이것은 결코 지정한 클래스가 '절대로' 1개 밖에 존재하지 않는 것을 '보증' 할 수 없습니다. 이처럼 인스턴스가 한 개밖에 존재하지 않는 것을 보증하는 패턴을 Singletone pattern 이라 합니다.
참고 자료 https://catsbi.oopy.io/344dbe7b-9774-48fc-9c95-b554e9c1c4bc
부모 메서드의 선언부(1️⃣리턴 타입, 메소드 이름, 매개변수)와 동일해야 한다. 사실상 (메소드 이름과 매개변수 = method signature)만 보고 오버라이딩 판단.
2️⃣접근 제 한을 더 강하게 오버라이딩 할 수 없다.(public -> private으로 변경 불가) - 더 강하게 설정하면 부모클래스를 사용하는 코드가 자식 클래스를 통해 동일한 메서드의 접근 못함
새로운 3️⃣예외를 throws할 수 없다. ex. Exception <- RuntimeException <- NullPointerException

OOP 4가지 특징
객체 지향 프로그래밍(OOP)의 네 가지 주요 특징은 캡슐화, 상속, 다형성 및 추상화입니다. 캡슐화는 데이터와 해당 데이터를 조작하는 메서드를 하나로 묶어 외부에서의 접근을 제어하는 것을 의미합니다. 상속은 부모 클래스의 특성을 자식 클래스가 상속받아 재사용하는 개념입니다. 다형성은 동일한 인터페이스나 기능을 사용하여 다양한 형태로 동작할 수 있는 능력을 의미합니다. 마지막으로, 추상화는 복잡한 시스템에서 핵심적인 부분에만 초점을 맞추고 불필요한 세부 사항을 숨기는 것을 의미합니다.
OOP 사용 이유
객체 지향 프로그래밍(OOP)의 네 가지 특징을 사용하는 이유는 소프트웨어를 보다 모듈화하고 유지보수하기 쉽게 만들기 위해서입니다. 캡슐화는 코드를 모듈화하여 외부로부터 데이터를 보호하고, 코드의 변경이 다른 부분에 미치는 영향을 최소화합니다. 상속을 통해 코드의 재사용성을 높이고 새로운 클래스를 쉽게 만들 수 있습니다. 다형성은 다양한 상황에 유연하게 대처할 수 있도록 해 주며, 추상화는 복잡성을 숨기고 핵심적인 부분에만 집중할 수 있게 도와줍니다. 이러한 특징들을 통해 코드의 구조를 보다 명확하게 설계하고 유지보수성을 높일 수 있습니다.
오늘 클래스 후반부랑 상속을 거의 끝냈다. 상속 부분은 하나씩 보면 할만한데 막상 코드를 치면 헷갈리고 어렵다. 오늘은 머리가 터질 것 같으니 복습 끝내고 쉬어야겠다.