1 객체에 대하여
class Animal {
}
public class Sample {
public static void main(String[] args) {
Animal cat = new Animal();
Animal dog = new Animal();
}
}
위 Animal 클래스는 가장 간단한 형태의 클래스로, 클래스의 선언만 존재하고 내용이 없는 껍데기 뿐인 클래스이다.
하지만 이 껍데기 뿐인 클래스도 아주 중요한 역할을 한다. "객체(object)를 만드는 기능"이다.
new는 객체를 생성할 때 사용하는 키워드이다. 이렇게 하면 Animal 클래스의 인스턴스(instance)인 cat, 즉 Animal의 객체가 만들어진다.
※ 객체와 인스턴스
Animal cat = new Animal() 이렇게 만들어진 cat은 객체이다. 그리고 cat이라는 객체는 Animal의 인스턴스이다.
인스턴스라는 말은 특정 객체(cat)가 어떤 클래스(Animal)의 객체인지를 관계 위주로 설명할 때 사용된다.
ex) "cat은 객체", "cat은 Animal의 인스턴스"
객체 (Object) VS 인스턴스 (Instance)
- 클래스의 타입으로 선언되었을 때 객체라 부르고, 그 객체가 메모리에 할당되어 실제로 사용될 때 인스턴스라고 부른다.
- 객체는 현실 세계에 가깝고, 인스턴스는 소프트웨어 세계에 가깝다. 모든 인스턴스를 대표하는 포괄적인 의미를 갖는다. ( 객체를 '클래스의 인스턴스'라고 부르기도 한다. )
- 객체는 '실체', 인스턴스는 '관계'에 초점을 맞춘다.
2 클래스와 객체

- 붕어빵틀 -> 클래스 (Class)
- 붕어빵틀에 의해 만들어진 붕어빵 -> 객체(Object)
클래스는 '설계도', 객체는 '설계도로 구현한 모든 대상'을 의미한다.
3 객체 변수 (Instance variable)
class Animal {
String name; // Animal 클래스에 name이라는 String 변수를 추가
}
public class Sample {
public static void main(String[] args) {
Animal cat = new Animal();
}
}
클래스에 의해 생성되는 것은 객체, 그 클래스에 선언된 변수는 객체 변수
Animal 클래스에 name 이라는 String 변수를 추가했다. 이렇게 클래스에 선언된 변수를 객체 변수 라고 한다.
객체 변수는 다음과 같은 도트 연산자(.)를 이용하여 접근한다.
class Animal {
String name;
}
public class Sample {
public static void main(String[] args) {
Animal cat = new Animal();
System.out.println(cat.name); // 객체: cat, 객체변수: name
}
}
null //결과값 ==> 객체 변수로 name을 선언하였지만, 아무런 값도 대입하지 않았기 때문
3-1 객체 변수는 공유되지 않는다.
class Animal {
String name;
public void setName(String name) {
this.name = name;
}
}
public class Sample {
public static void main(String[] args) {
Animal cat = new Animal();
cat.setName("boby"); // 메소드 호출
Animal dog = new Animal();
dog.setName("happy");
System.out.println(cat.name);
System.out.println(dog.name);
}
}
cat객체에는 "boby"라는 이름을, dog 객체에는 "happy"라는 이름을 대입했다.
setName 메소드에 의해 실행되는 두 문장은 어떻게 출력될 것 인가 ?
결과는 다음과 같이 출력된다,
boby
happy
결과를 보면 name 객체 변수는 공유되지 않는 다는 것을 확인할 수 있다.
** 클래스에서 가장 중요한 부분은 이 객체 변수의 값이 독립적으로 유지된다는 점이다.
객체 지향이라는 말도 결국, 이 객체 변수의 값이 독립적으로 유지되기 때문에 가능한 것 !
( + 객체 변수의 값은 공유되지 않지만, static을 이용해 공유가 가능하게 만들 수 있다. )
reference
'[Java] 자바' 카테고리의 다른 글
| [JAVA] 클래스, 객체, 인스턴스 (0) | 2024.06.25 |
|---|---|
| [JAVA] String 클래스 (0) | 2024.06.21 |
| [자바][JAVA] 배열(Array)과 리스트(List)에 대하여 (1) | 2022.12.01 |
| [JAVA]프로그래머스 - 분수의 덧셈 (0) | 2022.10.12 |
| [JAVA]프로그래머스 - 두 수의 나눗셈 (2) | 2022.10.11 |