해당 개념은 계속 보면서 더 좋은 비유가 떠오를 때마다 수정 예정
현실 세계의 시스템을 가상 환경에서 객체(Object) 라는 개념으로 표현하는 프로그래밍 종류 중 하나이다.
현실 세계에 존재하는 것을 가상세계로 옮겨와서 시스템으로 만든 것 같다.
고유의 속성, 상태, 기능 을 가지는 물리적, 추상적인 모든 것이다.
돌, 공기, 사람, Action, 과일 이 세상의 모든 것들은 객체가 될 수 있다.
객체의 공통적이고 일반적인 모든 속성, 기능, 행위 등을 추상화 하여 묶어둔 것이다.
사물들의 공통적 특징을 추출하여 하나의 개념으로 만드는 행위이다.
모델링 할 시스템에 종속적으로 추상화 작업이 진행 되는 특징이 있다.
하위의 객체가 가진 일반적인 특징을 상위 개념으로 부각시켜 하나로 개념화, 계층화 하는 과정이다.
is a 관계 : 사람은 동물이다.
구체적인 것은 일반적인 것이라 할 수 있다.
(반대로 모든 동물이 사람은 아니다.)
일반화된 특성(상위 객체) 을 가져와 각자(하위 객체) 만이 갖고 있는 속성이나 행위를 추가, 수정하여 구체화 하는 것을 말한다.
is a 관계 (+@ 상속 관계는 공유하지 않는다.)
추상화된 것을 목적에 맞도록 구현하는 것을 말한다.
나는 먹는다() 무엇을 what? 어떻게 How?
순수한 abstract method 만 있는 abstract class 이다.
해당 interface로 상위 abstract 클래스의 abstract method 를 공유하여 overriding 할 필요 없이,
interface 로 떼서 implements (구현) 하는 방향으로 만들어 낼 수 있다.
아무 연관 없지만, 필드에 존재하며 서로 관계를 갖는 연관 관계
생성자 호출 없이 바로 사용한다는 점에서 계속 갖고있다는 느낌이 강하다.
// Field
private MemberService memberService;
public void addMember() {
// MemberService memberService = new MemberService();
memberService.addMember();
// 이후 코드
}
A ----> B A가 B를 사용한다. 필요에 의해서 사용하는 관계 (메소드에 포함)
'필요할 때' 사용한다는 느낌이 강하다.
// Method
강의하다(){
B b = new B(); // 메소드 하위에 생성하여 쓰고 버림
b.사용();
}
상위의 일반적인 객체는 하위의 객체가 모두 보유한 특성이기에 하위 클래스를 인스턴스화 및 상위에 대입하여 사용 가능하다.
부모님을 대신해 자식이 부모님 이름으로 경조사에 참여 가능. (상속관계의 다형성)
운전하는 법을 알면 스펙이 어떤지 상관없이 SUV, 경차 모두 운전 가능하다. (인터페이스의 다형성)
캡슐화란 어떠한 객체가 가진 특징 및 상황에 따라 객체의 정보를 전부, 일부 공개, 비공개 하는 행위이다.
현실 세계와 같이 감추고 싶은건 감출 수 있게 만드는 행위로 간주된다.
나의 개인 정보는 나의 의사에 따라 낯선 타인에게는 알려주지 않고, 가족이나 친구에게는 공개할 수 있다.