컴퓨터를 이용하여 현실세계를 그대로 모방해 가상세계를 구현하려는 노력으로부터 생겨남.
object
와 instance
는 서로 비슷하다.
new
생성자로 만든 객체 => instance
메모리에 실제 존재하지 않음.
정의 ) 객체를 정의해놓은 것.
용도 ) 객체를 생성하는데 사용된다.
class 자체는 단순한 정의이다. (메모리에 실제하지 않음.)
== 서로 다른 형태의 데이터
| 함수 == 메서드
선정
기능, 속성 식별
메모리에 실제 값이 존재한다.
정의 ) 실제로 존재하는 것 사물 Or 개념
용도 ) 속성과 기능에 따라 다르다.
객체를 바라볼 때
기능보다는 데이터가 우선
이다.
객체의 기능은 해당 객체가 가지고있는 데이터를 기반으로 기능해야한다. (데이터 종속적)
예시로 아래와 같은 Human이라는 Class를 이렇게 만들면 좋은 Class일까?
public class Human {
int height, weight;
String name, sex;
String eat() {
return "현재 몸무게는 " + weight + "kg 입니다.";
}
}
변수와 전혀 상관없는 eat이라는 메서드가 있고, 해당 메서드는 String을 반환한다.
✅ 그래서?
데이터 종속적이라는 말의 의미는 해당 객체가 가지고 있는 변수를 기반으로 의미가 이어지는 메서드를 작성해야하는 것이라 생각한다.
현재 eat 메서드는 변수와 전혀 상관관계가 없으므로 좋은 class가 아님을 확신할 수 있다.
객체는 인스턴스를 포함하는 일반적인 의미
객체는 속성
과 기능
의 집합이며, 속성과 기능을 객체의 멤버(member, 구성요소)라고 한다.
속성
➡️변수
|기능
➡️메서드
로 정의한다.
package chap06;
public class Time {
int hour, minute, second; // 속성(변수)
void setHour(int h) { // 해당 코드 밑으로 기능(메서드)
hour = h;
}
void setMinute(int m) {
minute = m;
}
void setSecond(int s) {
second = s;
}
String currentTime() {
return hour + "시 " + minute + "분 " + second + " 초 입니다.";
}
}
인스턴스 생성방법
Time korea; // 클래스 이름(Time), 참조변수 이름(korea)
korea = new Time(); // 참조변수 이름(korea), (new 클래스 이름)
korea는 Time Type의 붕어빵 틀로 만들어진 붕어빵(인스턴스)다.
여러 객체
가 하나의 메모리 주소를 같이 참조할 수 있다.
하지만 하나의 객체가 여러 메모리 주소를 참조할 수 없다.
Time[] world = new Time[3];
// world라는 이름의 길이가 3인 Time 배열을 하나 생성해라.
// 각각의 길이가 배정된 인덱스들은 Time Class의 변수와 메서드를 가지고있다.
Ex ) world[0].setHour(3) 등등