객체의 생성

클래스로부터 객체를 생성하기 위해서는 new라는 예약어를 사용해야 한다. new는 객체 생성 연산자이다. 

new 생성자();

다음은 Student 클래스로부터 객체를 생성하는 과정이다.

public class Student {
	String name;
    int score;
}


new Student();

 클래스로부터 객체를 생성할 때 생성자가 자동으로 호출되는데, 이때 클래스의 멤버 변수가 초기화된다. 클래스로부터 객체를 생성하는 것은 배열 객체를 생성하는 것과 비슷하다. 다만 배열은 동일한 타입의 데이터만 저장할 수 있지만, 클래스는 다른 타입의 데이터도 저장할 수 있다. 이는 클래스에 선언된 멤버 변수들의 타입이 다르기 때문이다.

 

객체의 사용

클래스로부터 생성된 객체는 배열과 동일하게 참조 변수를 통해서만 접근할 수 있다. 참조 변수에 생성된 객체의 주소를 할당하는 과정은 다음과 같다.

클래스이름 참조변수;
참조변수 = new 생성자();

// 예시
Student kim;
kim = new Student();

Student lee = new Student();

 

이제 kim이라는 참조 변수를 통해서 메모리에 생성된 Student 객체에 접근할 수 있고, Student 객체에 포함된 멤버 변수를 사용할 수 있다. 

 

public class StudentTest {
    public static void main(String[] args) {
        Student kim = new Student();
        kim.name = "둘리";
        kim.score = 83;
        
        System.out.println("이름 : "+kim.name); // 둘리
        System.out.println("성적 : "+kim.score); // 83
    }
}


class Student {
    String name;
    int score;
}

먼저 생성자를 통해 Student 클래스의 객체를 생성했다. 그리고 kim 이라는 참조 변수를 통해 Student 객체에 포함된 name과 score 변수에 각각 "둘리", 83 이라는 값을 할당했다. 그리고 나서 Student 객체가 가진 name, score 변수의 값을 출력했다.

 

728x90

'Language > JAVA' 카테고리의 다른 글

[JAVA] 패키지  (0) 2023.10.19
[JAVA] 접근 제어자  (0) 2023.10.19
[JAVA] 클래스 Class (2)  (0) 2023.10.18
[JAVA] 클래스 Class (1)  (0) 2023.10.18
[JAVA] 버블 정렬 알고리즘  (0) 2023.10.18

객체

객체지향 언어에서 말하는 객체(Object)는 현실 세계에서 존재하는 유/무형의 모든 것을 의미한다.

현실 세계의 객체는 명사적인 특징과 동사적인 특징으로 구성되는데, 예를 들어 학생이라는 객체를 대상으로 명사적 특징과 동사적 특징을 정리해보면 다음과 같은 결과가 나온다.

 

객체 이름: 학생

명사적 특징: 학교 이름, 전공, 학년, 성별, 이름, 시험 점수, 나이, 주소

동사적 특징: 점심을 먹는다. 수업을 듣는다. 시험을 본다. 게임을 한다.

 

이런 객체의 명사적 특징과 동사적 특징을 기반으로 소스 코드 형태의 클래스를 만드는 것이다.

 

클래스

클래스(class)는 지금까지 우리가 작성했던 모든 자바 파일에 포함되어 있었다. 

우리가 작성하는 모든 자바 프로그램은 클래스 형태였다. 하지만 지금까지 테스트를 위해 작성햇던 클래스는 실제 프로그램에서 사용되는 클래스와는 많이 다르다.

 

실제 프로그램에서 사용하는 클래스는 객체와 관련되어 있다. 현실 세계에 존재하는 학생 객체를 컴퓨터 프로그램에서 이용하기 위해서는 학생 객체가 반드시 컴퓨터 메모리에 존재해야 한다. 하지만 현실 세계에 존재하는 학생을 컴퓨터 메모리에 집어넣는 것이 불가능하기 때문에 학생 객체를 추상화하여 소스 코드 형태의 클래스를 만드는 것이다.

 

객체 기반으로 클래스를 만들 때는 객체의 명사적 특징은 멤버 변수로, 동사적 특징은 메소드로 변환한다. 

//  클래스 선언
class Student {
    // 멤버 변수 선언
    String schoolName;
    String major;
    int grade;
    String idNumber;
    char gender;
    String name;
    int score;
    int age;
    String address;
    
    // 메소드 선언
    void haveLunch () {
        System.out.println("점심을 먹는다.");
    }
    
    void takeClass() {
        System.out.println("수업을 듣는다.");
    }
    
    void takeTest() {
        System.out.println("시험을 본다.");
    }
    
    void playGame() {
        System.out.println("게임을 한다.");
    }

중요한 것은 클래스를 만들 때 어떤 관점에서 객체를 바라보느냐에 따라 클래스의 모습이 달라진다는 것이다. 예를 들어 학사 관리 시스템을 개발한다면 학생 객체에서 중요한 명사적 특징은 전공, 이름, 시험 점수일 것이다.

 

하지만 놀이공원 예약 시스템을 개발하는 경우라면 전공이나 시험 점수 같은 정보는 전혀 중요하지 않으며 오히려, 전화번호나 이메일 정도가 중요하게 사용될 것이다. 이렇게 어떤 과점에서 객체를 바라보느냐에 따라 다양한 모습의 클래스가 만들어진다.

 

인스턴스

인스턴스(instance)는 클래스를 이용하여 메모리에 생성한 객체를 의미한다. 그런데 현실세계에 존재하는 객체도 객체라고 부르고, 클래스를 통해 메모리에 생성한 객체도 객체라고 부르기 때문에 혼란이 생길 수 있다.

 

이런 혼란을 피하기 위해 메모리상의 객체를 인스턴스라고 부른느데, 개발자들은 메모리상의 인스턴스를 편의상 객체라고 부르기 때문에 현실 세계의 객체와 혼동되는 것이다. 일반적으로 객체라고 하면 메모리상의 인스턴스를 의미한다고 보면 된다.

 

728x90

'Language > JAVA' 카테고리의 다른 글

[JAVA] 클래스 Class (3)  (0) 2023.10.18
[JAVA] 클래스 Class (2)  (0) 2023.10.18
[JAVA] 버블 정렬 알고리즘  (0) 2023.10.18
[JAVA] 참조 변수와 null  (0) 2023.10.18
[JAVA] 배열  (0) 2023.10.18

+ Recent posts