topic난이도 · 약 20

클래스와 객체

클래스는 설계도, 객체는 new로 찍어낸 실체. 필드(상태)와 메서드(행동)로 구성된다.

#Java#객체지향#기초
왜 배우는가

모든 Java 코드 추적 문제의 출발점. 필드와 지역 변수의 구분, 생성자 호출 순서, 참조 변수와 실제 객체의 관계를 확실히 해두지 않으면 뒤의 상속·다형성에서 무너진다.

클래스(class)는 공통된 속성과 행위를 묶어 정의한 설계도이며, 객체(object)는 그 설계도로부터 `new` 연산자를 통해 생성된 실체(instance)다. 하나의 클래스로 여러 객체를 만들 수 있고, 각 객체는 독립된 메모리 공간에 필드 값을 따로 보관한다.

java
public class Student {
    // 필드 (인스턴스 변수)
    String name;
    int score;

    // 생성자
    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    // 메서드
    public String grade() {
        return score >= 60 ? "Pass" : "Fail";
    }
}

// 사용
Student s1 = new Student("홍길동", 85);
Student s2 = new Student("이순신", 55);
System.out.println(s1.grade()); // Pass
System.out.println(s2.grade()); // Fail

s1과 s2는 같은 Student 클래스에서 생성됐지만, 각각의 name·score는 독립적이다. this는 '지금 실행 중인 이 객체'를 가리킨다.

핵심: 참조 변수(s1)는 힙에 있는 객체의 주소를 담는다. `Student s3 = s1;`을 하면 새 객체가 아니라 같은 주소를 공유한다.

실기 드릴 1문항
code실기 드릴 · 코드 추적

다음 코드의 출력 결과를 쓰시오.

java
class Box {
    int v;
    Box(int v) { this.v = v; }
}
public class Test {
    public static void main(String[] args) {
        Box a = new Box(10);
        Box b = a;
        b.v = 20;
        System.out.println(a.v + "," + b.v);
    }
}