✔️ 추상 클래스 : 객체의 추상적인 상위 개념으로 공통된 개념을 표현할 때 사용함. 단일 상속만 가능
✔️ 인터페이스 : 구현 객체가 같은 동작을 한다는 것을 보장하기 위해 사용. 다중 상속 가능
✔️ 클래스 : 객체를 정의하는 틀 또는 설계도
✔️ 객체(인스턴스) : 식별 가능한 개체 또는 사물. 객체는 구별 가능한 식별자, 특징적인 행동, 변경 가능한 상태
class card {
String kind;
int number;
static int width = 100;
static int height = 250;
}
각 카드 인스턴스는 자신만의 종류와 숫자를 유지해야 하므로 인스턴스 변수, 각 카드들의 폭과 높이는 모든 인스턴스가 공통적으로 같은 값을 유지해야 하므로 클래스 변수
만일 카드의 폭을 변경해야할 때는 모든 카드의 값을 변경하지 않고, 한 카드의 width만 변경해도 모든 카드의 width가 바뀌는 것.
출처 : https://vaert.tistory.com/101
원시타입은 항상 값이 존재해야 함. 변수가 초기화될 때 원시타입은 기본값을 가지지만 참조 타입은 null 포인터를 가짐
프로그래밍에서 필요한 데이터를 추상화시켜서 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법임
✔️ 장점
✔️ 추상화 : 불필요한 정보는 숨기고 중요한 정보만 표현해서 공통의 속성이나 기능을 묶어 이름을 붙이는 것
✔️ 캡슐화 : 코드를 재수정없이 재활용 하는 것. 객체가 맡은 역할을 수행하기 위한 하나의 목적을 한데 묶는다.
✔️ 상속 : 부모 클래스의 속성과 기능을 그대로 이어받아 사용할 수 있게 하고, 기능의 일부분을 변경해야 할 경우 상속받은 자식 클래스에서 해당 기능만 다시 수정하여 사용할 수 있게 함
✔️ 다형성 : 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있음
✔️ getter, setter를 사용하는 이유 : 메소드를 통해서 접근하기 때문에 메소드 안에서 매개변수 같이 어떤 올바르지 않은 입력에 대해 사전에 처리할 수 있음.
shallow copy : 객체의 주소값을 복사. 객체만 복사하여 새 객체를 생성
deep copy : 객체의 실제값을 복사함. 복사할 때 객체와 변수까지 복사
✔️ 깊은 복사를 하기 위해선 Cloneable interface를 implement해서 clone 메소드를 오버라이드 해야 함.