객체(Object)란 세상에 존재하는 모든 사물을 의미한다.
“우리가 눈으로 보고, 느끼고, 생활하는 현실 세계처럼 프로그래밍할 수는 없을까?”라는 고민 속에서 탄생한 것이 객체 지향의 개념.
사물(object)는 속성(filed)과 역할(method)을 갖는다.
public class Mouse {
public String name; => name, age, countOfTail은 쥐의 속성(filed)
public int age;
public int countOfTail;
public void sing() {
System.out.println("나는 "+name+"이야. 찍찍");
}
=> sing은 쥐가 할 수 있는 역할 혹은 행동(method)
}
더 나아가 고유의 사물을 더 큰 범주로 분류화 하는 Class 개념으로 사물을 묶어서 이해한다.
클래스와 객체의 사전적 정의
세 가지 변수 유형
이름 | 다른 이름 | 사는 곳(메모리) |
---|---|---|
static 변수 | 클래스 속성, 정적 변수, 정적 속성 | 스태틱 영역(메소드 영역 |
인스턴스 변수 | 객체 속성, 객체 변수, 인스턴스 필드 | 힙 영역 |
local 변수 | 지역 변수 | 스택 영역 |
객체 지향 4대 특성 ( 캡!! 상추다)
캡슐화
상속( → 확장이라고 이해하는게 더 알맞음)
부모 클래스와 자식 클래스로 이해하지 말고, 상위 클래스와 하위 클래스로 이해하자.
객체 지향에서의 상속은 계층도가 아닌 분류도 개념이다.
아버지라는 클래스가 있고, 그 하위 클래스가 딸이라는 클래스라면,
아버지 영희 아빠 = new 딸( ); 이라는 코드가 성립되어야 하는데, 논리적으로 맞지 않다.
→ 따라서 아버지와 딸은 상속 관계가 될 수 없다.
→ 굳이 확장할 필요까진 없지만 만약 상속을 적용하고 싶다면, 사람 클래스에서 아버지 클래스로 확장되어야 함이 합당 하다.
DIP 의존 관계 역전 원칙