- Java에서 객체를 생성하기 위한 일종의 설계도 혹은 틀
- 연관된 변수와 메서드의 집합
public class 클래스이름 {
}
- 소프트웨어 세계에 구현할 대상
- 클래스에 선언된 모양 그대로 생성된 실체
- 객체는
속성
과기능
으로 구성되어 있다.
ex) 사람
속성: 이름,나이
동작: 달리다, 걷다, 공부하다
일반적으로 객체는 다수의 속성과 다수의 기능을 갖습니다.
객체 = 속성과 기능의 집합
ex) TV
속성: 채널 > int channel;
기능: 채널 높이기 > channelUp() {...}
- 현실의 객체를 소프트웨어 내에서 구현한 실체
- 클래스가 붕어빵 틀이라면 그 틀을 통해 생성된 실제 객체(붕어빵) 하나하나를 해당 클래스의 인스턴스라고 부른다.
- 생성된 인스턴스들은 각자 고유의 특성을 가지고 독립적으로 존재한다.
자바 프로그램 실행시 클래스는 JVM 메모리의 클래스 영역에 로드되고, 이 클래스를 사용하여 힙 영역(Heap Area)에 새로운 인스턴스(객체)를 생성할 수 있다.
참조변수와 인스턴스의 연결
인스턴스의 생성과 사용
자바에서는 new 연산자
를 통해 인스턴스를 생성할 수 있다.
Card c = new Card();
Card() {}
public class Person {
String name;
String gender;
//매개변수가 있는 생성자
Person(String name, String gender) {
this.name = name;
this.gender = gender;
}
}
public class Main {
public static void main(String[] args) {
Parent p = new Child();
Child c = new Child();
System.out.println(p.a); // prints 200
System.out.println(c.a); // prints 100
p.method(); // prints "Child Method"
c.method(); // prints "Child Method"
}
}
class Parent {
int a = 200;
void method(){
System.out.println("Parent Method");
}
}
class Child extends Parent {
int a = 100;
void method(){
System.out.println("Child Method");
}
}
Child의 인스턴스인데, Parent 타입의 참조변수인 경우와 child 타입의 참조변수인 경우에는 차이점이 있다.
첫번째, 참조할 수 있는 멤버의 범위가 다르다.
두번째, 접근하는 멤버변수가 달라진다.
위의 예시에서 조상클래스 Parent의 인스턴스 변수 x, 메서드 method는 자식클래스 Child에서 중복 정의되고 오버라이딩되었다. 이 때 메서드의 경우, 동일하게 자식클래스의 메서드 즉 오버라이딩된 메서드를 출력하지만, 변수의 경우 참조타입의 멤버변수로 접근한다.
만약 인스턴스 변수를 중복 정의하지 않은 경우, 선택의 여지가 없기 때문에 조상클래스의 멤버를 호출한다.