본문 바로가기
JAVA

[JAVA] 객체와 클래스 - 인스턴스변수 선언 후 객체 생성하기

by Amy IT 2022. 5. 21.

◆ 객체와 클래스

 

객체(object)란 실생활에서 주체(subject)가 파악할 수 있는 모든 존재하는 것으로서, 모든 객체는 속성과 동작으로 구성됩니다. 특정 객체의 속성과 동작을 적절하게 추출하여 정의하는 것을 '객체 모델링'이라고 하며, 현실 세계에서 추출한 객체를 자바와 같은 프로그래밍 언어에서 적절하게 표현하는 것을 '객체지향 프로그래밍(Object Oriented Programming: OOP)'이라고 합니다. ① 객체 모델링을 통해 얻은 객체를 ② 클래스로 설계한 후 ③ 클래스의 인스턴스를 통해 프로그램을 구현하는 것이 객체지향 개발의 과정이라고 할 수 있습니다. 

예를 들어 10명의 학생 정보를 저장하고자 합니다. ① 객체 모델링 : 기본적으로 필요한 정보는 이름, 생년월일, 전화번호 등이 있습니다. ② 설계 : 이러한 학생에 대한 정보를 담을 수 있는 학생 클래스를 만듭니다. ③ 구현 : 학생 클래스를 사용하기 위해 객체를 생성하고 1번 학생의 정보를 저장합니다. 다시 객체를 생성하고 2번 학생의 정보를 저장합니다. 이렇게 하나의 학생 클래스로 여러 학생(인스턴스)들을 표현할 수 있게 됩니다. 클래스는 인스턴스를 생성하기 위한 틀이라고 할 수 있습니다. 

 

 

 

◆ 클래스의 구성요소

 

자바에서 모든 객체는 클래스로 정의되어집니다. 클래스의 형식은 다음과 같습니다.

접근제한자 class 클래스명 {

}

 

클래스는 세 가지 구성요소를 갖습니다.

 

(1) 멤버변수(member variable) : 클래스 구성요소인 속성 값을 저장하기 위한 용도로서, 데이터가 실제로 저장되는 곳입니다. 멤버변수는 다시 인스턴스변수와 클래스변수로 구분됩니다. 

(2) 메소드(method) : 멤버함수(member function)라고도 하며, 멤버변수에 저장된 속성 값을 수정하거나 조회하는 등 다양한 기능을 처리하는 역할을 합니다.

(3) 생성자(constructor) : 멤버변수를 초기화하는 역할을 합니다. 즉, 변수에 데이터를 맨 처음 지정할 때 사용합니다.

 

 

 

◆ 멤버변수와 로컬변수 비교

 

변수명 선언 사용 생성-소멸 특징
로컬변수 메소드 내 선언 변수가 속한 블럭 안에서만 사용 가능 메소드가 호출되어 코드가 실행될 때 변수가 생성되고, 메소드 종료시 삭제
(메소드 호출 시마다 생성)
변수를 선언한 후 반드시 초기화를 명시적으로 해야 사용 가능 public void a(){
      int num=2;
}
멤버
변수
인스턴스변수 클래스 블럭에 선언 클래스 전체에서 사용 가능, 다른 클래스에서 참조변수로 참조해 사용 가능 객체를 생성할 때 생성되고, 객체가 소멸되고 더 이상 참조되지 않을 때 삭제
(new 할 때마다 생성) 
선언만 해도 자동으로 초기화되어 기본값으로 설정됨 int num;
public void a(){}
클래스변수(static변수) 클래스 전체에서 사용 가능, 다른 클래스에서 클래스명 붙여서 사용 가능 프로그램 실행 시 생성되고, 프로그램 종료 시 삭제
(단 한 번만 생성)
static int num;
public void a(){}

 

 

 

◆ 객체 생성 (인스턴스 작업)

 

클래스를 정의한 후 클래스를 사용하기 위해서는 객체를 생성해야 합니다. 객체 생성은 new 키워드를 사용하여 생성자를 호출함으로써 클래스 내의 멤버변수와 메소드를 메모리에 생성시키는 작업입니다. 메모리에 생성된 클래스의 멤버에 접근하기 위해 해당 주소값을 해당 클래스 타입의 참조변수에 저장시켜 줍니다. 따라서 기본 문법은 다음과 같은 형식이 됩니다. 이렇게 객체 생성이 완료되면 생성된 인스턴스변수는 초기값을 가지게 됩니다. 

클래스명 변수명 = new 클래스명([값]);

 

학생 클래스에 인스턴스변수를 선언한 후 객체 생성하여 2명의 학생 정보(이름, 나이)를 각각 저장하는 프로그램을 만들어 보겠습니다. 

public class Student {
	String name;
	int age;
}
public class TestStudent {

	public static void main(String[] args) {
		Student stu1 = new Student(); //Student클래스의 생성자 호출해서 객체 생성
		System.out.println(stu1); //생성된 객체 주소가 stu1에 저장됨
		System.out.println(stu1.name); //초기값 null
		System.out.println(stu1.age); //초기값 0
		stu1.name ="홍길동"; //참조변수.멤버변수 형식으로 1번 학생 정보 저장
		stu1.age =10; 
		System.out.println(stu1.name); 
		System.out.println(stu1.age);
		
		Student stu2 = new Student(); //Student클래스의 생성자 호출해서 객체 생성
		System.out.println(stu2); //생성된 서로 다른 객체 주소가 stu2에 저장됨
		stu2.name ="이순신"; //2번 학생 정보 저장
		stu2.age =20;
		System.out.println(stu2.name);
		System.out.println(stu2.age);
	}

}

stu1과 stu2를 출력하면 해당 변수가 참조하고 있는 객체의 주소값이 출력되는데, 서로 다른 주소값이 출력되는 것을 확인할 수 있습니다. 즉, 학생 클래스를 이용해 학생 한 명 한 명의 정보를 서로 다른 객체에 저장할 수 있다는 것입니다. 또한, 1번 학생의 정보를 저장하기 전 인스턴스변수를 출력하면 초기값이 출력되는 것을 확인할 수 있습니다. 

 

이번에는 인스턴스변수를 선언하는 동시에 초기값을 지정해 보겠습니다.

public class Student {
	String name = "홍길동";
	int age = 10;
	String address = "서울";
}
public class TestStudent {

	public static void main(String[] args) {
		Student stu1 = new Student();
		System.out.println(stu1.name+"\t"+stu1.age+"\t"+stu1.address); 
	}

}

지정한 초기값이 출력되는 것을 확인할 수 있습니다. 인스턴스변수에 초기값을 지정할 경우 생성되는 모든 객체는 같은 값을 가지고 생성됩니다. 

 

 

이번 글에서는 객체와 클래스의 기본 개념, 변수의 종류와 차이, 인스턴스변수 선언 후 객체 생성하는 기본적인 방법에 대해 알아보았습니다. 다음 글에서 이어서 클래스의 구성요소인 생성자에 대해 정리해 보겠습니다. 

 

 

댓글