[Java] #9 객체 1 (개념, 멤버 변수)

febCho·2023년 10월 15일
0

Java

목록 보기
27/53

1. 객체란 무엇인가

앞서 사용해왔던 클래스가 건물의 도면 혹은 재료라면,
지금부터 배울 객체는 건물 혹은 자동차, PC나 가방 등의 물체, 물건, 대상을 말한다.

이러한 객체를 '사용하기 위해' 메모리 안에 만들게 되는데, 사용하려면 '명령'이 필요하며
명령을 내리기 위해서는 대상에 '에너지'를 전달해야 하는데 이 에너지가 바로 '데이터'에 해당한다.

또한, 객체라는 '건물'을 만들기 위해서는 찾아가기 위한 주소가 필요하며
객체는 사용할 가능성이 있는 모든 것들을 한꺼번에 다 '그룹으로' 만들어 메모리에 올려야 한다는 특징을 가지고 있다.
비유하자면, 에어컨을 사용하지 않을 자동차라고 해도 에어컨이 자동차의 요소이니 자동차를 만들 때 무조건 추가하는 것과 유사하다.
따라서 메모리에 그룹으로 만들어 올린 구성원들은 꺼내어 써도 되고 쓰지 않아도 된다.

지금까지 객체를 알기 쉽게 이해하도록 비유를 들어 설명해 보았다.
이제부터는 예제를 통해 '객체'라는 개념을 좀 더 자세히 알아보자.

1. 멤버 변수

package kr.s07.object;

public class Student01 {
	
	//멤버 변수(객체의 구성원)
	String name;
	int age;
	
	public static void main(String[] args) {
		//객체 선언
		//자료형    주소 저장할 변수
		Student01 student;
		//객체 생성
		student = new Student01();
		
		//객체의 멤버 변수에 값 할당
		student.name = "홍길동";
		student.age = 20;
		
		//객체의 멤버 변수 값 출력
		System.out.println(student.name + "," + student.age);
	}
}

멤버 변수에 대해 공부하기에 앞서 객체의 선언과 생성을 알아야 한다.
앞서 공부한 배열이 그러했듯, 객체 또한 선언과 생성은 별도의 개념이다.

  1. 우리는 객체에 담긴 멤버 변수(객체의 구성원)를 사용하기 위해 객체를 호출하게 되고
    메인 영역에서 객체를 선언하고 생성한다.
    이때 자료형은 클래스라는 점을 꼭 기억해야 한다.

  2. 또한 객체를 생성할 때도 new라는 생성 연산자를 사용하게 되는데, 배열을 생성 시에도 이를 사용한 이유는 java에서는 배열 역시 하나의 객체로 인식하기 때문이다.
    ex. 객체 선언: Student01 student;, 객체 생성: student = new Student01();

자료형이 생소하여 낯설어 보일 수 있지만, 이는 배열을 선언 및 생성할 때와 똑같은 형태를 띈다.

배열)
배열 선언: char[] ch;
배열 생성: ch = new char[4];

객체)
객체 선언: Student01 student;
객체 생성: student = new Student01();
  1. 그리고 멤버 변수는 메인 영역이 아닌 클래스 영역에 만들어 주어야 한다.
public class Student01 {
	
	//멤버 변수(객체의 구성원)
	String name;
	int age;
	
	public static void main(String[] args) {
  1. 멤버 변수와 같은 객체의 하위 요소(구성원)들에 접근(입력/호출)하기 위해서는 객체명 뒤에 .을 붙인 뒤 변수명을 호출해야 한다.
    ex. student.name = "홍길동";, System.out.println(student.name + "," + student.age);
package kr.s07.object;

public class Student02 {
	//멤버 변수 - 사용할 가능성이 있는 것들음 모두 생성 가능
	String name;
	int age;
	String hobby;
	
	public static void main(String[] args) {
		//객체 선언 및 생성
		Student02 student = new Student02();
		//객체가 생성되면 객체의 멤버 변수는 기본값으로 초기화됨
		System.out.println(student.name + "," + student.age 
				           + "," + student.hobby);
		System.out.println("=========================");
		
		//객체의 몀버 변수에 값 할당
		student.name = "박문수";
		student.age = 20;
		student.hobby = "축구";
		
		System.out.println(student.name + "," + student.age 
				           + "," + student.hobby);
		
	}//main
}//class
  1. 객체에서도 배열과 마찬가지로 객체의 선언과 생성을 동시에 할 수 있다.
    ex. Student02 student = new Student02();

  2. 그리고 객체가 생성되면 객체의 멤버 변수는 기본값으로 초기화 된다.
    기본값
    따라서 위 Student02 예제의 출력 결과는 다음과 같다.

출력)
null,0,null
=========================
박문수,20,축구
  1. 여기서 객체를 선언할 때 자료형과 함께 명시되는 변수는 뭐라고 부를까? 바로 '참조 변수'이다. 위 예제에서는 Student02 student의 'student'가 참조 변수에 해당한다.

  2. 그리고 Student02 student = new Student02(); 앞에 있는 Student02는 자료형에 해당하지만, new 연산자 뒤에 있는 Student02()는 '생성자'라고 부른다.
    이 생성자는 객체의 구성원이 아니다.

package kr.s07.object;

public class Student03 {
	//멤버 변수
	String name;
	int age;
	String hobby;
	String job;
	
	public static void main(String[] args) {
		//객체 선언 및 생성
		Student03 student = new Student03();
		//객체의 멤버 변수에 값 할당
		student.name = "홍길동";
		student.age = 20;
		student.hobby = "축구";
		student.job = "대학생";
		
		System.out.println("이름: " + student.name);
		System.out.println("나이: " + student.age);
		System.out.println("취미: " + student.hobby);
		System.out.println("직업: " + student.job);
		System.out.println("=====================");
		
		Student03 student2 = new Student03();
		
		student2.name = "장영실";
		student2.age = 19;
		student2.hobby = "야구";
		student2.job = "고등학생";
		
		System.out.println("이름: " + student2.name);
		System.out.println("나이: " + student2.age);
		System.out.println("취미: " + student2.hobby);
		System.out.println("직업: " + student2.job);
	}
}
  1. 동일한 멤버 변수로 한 클래스 내에 여러 개의 객체를 만들 수 있다. 따라서 위와 같이 Student03 클래스의 멤버 변수 name, age, hobby, job으로 student와 student2라는 두 객체를 만들어 각기 다른 값을 할당해 주는 것이 가능하다.


다음은 객체의 멤버 변수에 데이터를 저장, 성적 처리하는 프로그램을 만들었다.
> 객체를 활용해 성적 프로그램 만들기


하나의 클래스를 객체 생성용으로만 사용하고, 그 클래스에 만든 멤버 변수는 다른 멤버 변수에서 호출해 사용할 수도 있다.

package kr.s08.object.field;

class Car{
	
}
public class CarMain {
	public static void main(String[] args) {
		
	}
}

만약 위와 같이 코드를 작성, 파일을 저장한다면 아래와 같이 각 클래스가 별도로 컴파일 되어 있는 것을 확인할 수 있다.
컴파일 별도

이를 응용하여 객체에 자동차 정보를 저장하는 코드를 작성해 보았다.

package kr.s08.object.field;

class Car{
	//멤버 변수
	String company = "KG모빌리티";
	String model = "토레스";
	String color = "회색";
	int maxSpeed = 350;
	int speed = 90;
}
public class CarMain {
	public static void main(String[] args) {
		Car myCar = new Car();
		
		System.out.println("제작회사: " + myCar.company);
		System.out.println("모델명: " + myCar.model);
		System.out.println("색상: " + myCar.color);
		System.out.println("최고속도: " + myCar.maxSpeed);
		System.out.println("현재속도: " + myCar.speed);
		System.out.println("============================");
		
		myCar.speed = 60;
		System.out.println("수정된 속도: " + myCar.speed);
	}
}
  1. 앞선 예제들과 달리, Car 클래스의 멤버 변수들은 기본값을 세팅(멤버 변수 초기화)하고 출발하였다.

  2. 그리고 객체의 선언 및 생성을 Car 클래스가 아닌 CarMain 클래스 내에서 진행하였고, 호출 또한 CarMain 클래스에서 했다. 이렇듯 객체의 선언 및 생성, 멤버 변수의 호출은 외부 클래스에서도 가능하다.

public class CarMain {
	public static void main(String[] args) {
		Car myCar = new Car();
  1. 또한, 멤버 변수의 값을 외부 클래스에서 변경하는 것도 가능하다.
    ex. myCar.speed = 60;
출력)
제작회사: KG모빌리티
모델명: 토레스
색상: 회색
최고속도: 350
현재속도: 90
============================
수정된 속도: 60
profile
Done is better than perfect.

0개의 댓글