⚙️ Backend/JAVA

JAVA(자바) - 클래스와 객체

코너(Corner) 2020. 11. 9.
반응형

클래스와 객체

객체지향 프로그램을 작성하다 보면 같은 기능을 하는 객체를 여러 개 사용할 필요성이 요구된다.

객체지향에서는 동일한 속성과 기능을 가진 객체를 생성하기 위해 클래스라는 형판(template)을 제공하고 있다.

 

즉, 클래스는 하나의 클래스로부터 여러 개의 객체를 생성하기 위해 사용하는 형판 즉, 틀이라 생각하면 된다.

클래스와 객체 사이를 나타내는 관계는 우리 주변에서도 흔히 볼 수 있다.

 

예를 들어 길거리에서 팔고 있는 붕어빵은 붕어빵 틀에서 구워져서 나오게 된다. 붕어빵 틀에서 나오는 붕어빵은 모두 모양이 같다. 또한 하나의 붕어빵 틀에서 같은 모양의 붕어빵을 무한대로 만들어 낼 수 있다.

여기서 붕어빵 틀이 클래스이고 붕어빵이 객체이다.

중요한 사실은 우리가 먹을 수 있는 것은 붕어빵(객체)이지 붕어빵 틀(클래스)이 아니라는 점이다.

즉 객체지향에서 데이터를 처리하는데 사용되는 것은 클래스로부터 생성된 객체이지 클래스가 아니라는 점이다. 클래스는 붕어빵 틀처럼 객체를 생성하는 역할을 수행한다.


 

클래스와 객체의 구성

자바는 객체지향 언어로서 실세계에 존재하는 사물을 객체로 정의한다. 이러한 객체는 "속성+기능"으로 구성되며, 객체를 생성하는 클래스 역시 "속성+기능"으로 구성된다.
객체는 클래스로부터 생성되기 때문에 클래스의 구조에 대해서 기술한다.



예제 : 과목의 성적을 계산하여 평균을 알려주는 클래스의 구성을 작성

코드 확인하기-

더보기
class Avg {
	String name; // 속성
	int avg; // 
	public String average(int kor, int eng) { // 기능
		avg = (kor+eng)/2; // 평균의 값
		return name+avg; // 이름과 평균으로 돌려보내기
	} // 기능 end
}


객체의 생성

클래스로부터 객체를 생성하는 과정을 실체화(instantiation)라고 하고, 객체를 인스턴스(instance)라 부르기도 한다. 즉 객체와 인스턴스라는 말은 같은 용어라고 보면 된다.

앞 절에서 클래스와 객체를 설명하기 위해 붕어빵 틀과 예를 살펴보았다. 붕어빵을 만드는 과정을 좀 더 자세히 관찰해 보면, 부엉빵 틀에 우선 밀가루 반죽을 붓고 빵에 들어가는 팥소를 넣는다.

이때 팥으로 만든 팥소를 넣으면 팥 붕어빵이 되고, 녹두로 만든 팥소를 넣으면 녹두 붕어빵이 된다. 즉 하나의 틀에서 모양은 같지만 내부에 들어있는 내용이 다른 붕어빵을 만들어 낼 수 있다.마찬가지로 하나의 클래스로부터 객체를 생성될 때 각 객체는 같은 속성과 기능을 가지지만, 속성에 저장된 값은 모두 다르게 지정할 수 있다.


실습예제

: 위에서 작성한 평균을 구하는 클래스로부터 객체를 생성하는 예를 살펴보자.

더보기
public class Main {

	public static void main(String[] args) {
		// 사용
		Scanner sc = new Scanner(System.in);
		
		Avg student1 = new Avg();
		Avg student2 = new Avg(); // student1,2라는 객체를 생성한 것.
		
		student1.name ="김철수"; // student1,2 객체의 이름 지정 
		student2.name ="김영희"; // 생성된 객체의 속성에 서로 다른 값을 저장한 것이다.
		
		String st1_avg = student1.average(70,80);
		String st2_avg = student2.average(80,90);
		System.out.println(st1_avg);
		System.out.println(st2_avg);
	}

}

전체 코드

더보기
package 객체지향개념;

import java.util.Scanner;

class Avg {
	String name; // 속성
	int avg; // 
	public String average(int kor, int eng) { // 기능
		avg = (kor+eng)/2; // 평균의 값
		return name+avg; // 이름과 평균으로 돌려보내기
	} // 기능 end
}

public class Main {

	public static void main(String[] args) {
		// 사용
		Scanner sc = new Scanner(System.in);
		
		Avg student1 = new Avg();
		Avg student2 = new Avg(); // student1,2라는 객체를 생성한 것.
		
		student1.name ="김철수"; // student1,2 객체의 이름 지정 
		student2.name ="김영희"; // 생성된 객체의 속성에 서로 다른 값을 저장한 것이다.
		
		String st1_avg = student1.average(70,80);
		String st2_avg = student2.average(80,90);
		System.out.println(st1_avg);
		System.out.println(st2_avg);
	}

}
반응형

댓글