[JAVA] 클래스와 인스턴스 그리고 객체

김주현·2021년 3월 31일
0

Java

목록 보기
8/15

클래스

클래스는 객체를 만들기 위한 일종의 설계도입니다. (ex. 메소드의 정의)

클래스화

public class CalculatorDemo {
    
	public static void main(String[] args) {
		//메소드를 사용함으로써 코드의 양을 줄일 수 있음
		sum(10,20);
		sum(20,40);
	}
	public static void sum(int left, int right) {
		//left,right의 매개변수 생성
		//sum메소드에 매개변수 대입한후에 print로 출력
		System.out.println(left+right);
	}
}

인스턴스

설계도에 따라서 만들어진 구체적인 제품 (ex. 메소드의 호출)

개선이 필요한 예제

아래 예제와 같이 위에있는 left,right변수,메소드들과 아래에 있는 left,right변수,메소드들을 어떻게 그룹화하는 것이 좋을까 (중복제거의 필요성)

public class CalculatorDemo3 {

	public static void main(String[] args) {
		int left,right;
		//위에 있는 left,right값과 메소드들,아래의 left,right값과 메소드들을 어떻게 그룹화할까
		left=10;
		right=20;
		//때에따라서 left값을 15로 주고싶을때가 있고 right값을 30으로 주고싶을때가 있을텐데 어떻게 하면될까
		sum(left,right);
		avg(left,right);
		
		left=20;
		right=40;
		
		sum(left,right);
		avg(left,right);
	}

	private static void avg(int left, int right) {
		System.out.println((left+right)/2);
		
	}

	private static void sum(int left, int right) {
		System.out.println(left+right);
		
	}

}

객체지향 기법을 이용해 개선한 예제

아래 예제와 같이 두개의 인스턴스를 각각 c1,c2에 담았습니다.그리고 각각의 인스턴스에 소속된 메소드를 호출하고 있습니다.

this.left,this.right는 클래스에서 정의된 left,right를 말하고, this가 없이 사용된 left,right는 메소드에서 정의된 left,right입니다.

//인스턴스에서 지정한 값을 받아들여 메소드로 결과값을 도출함
class Calculator{
	int left,right;
	public void setOprands(int left, int right) {
		//this.는 인스턴스자신을 말한다. 위에 int left,right가 대입되게 된다.
		//오른쪽의 left,right는 위에 매개변수가 대입되게된다. 
        //매개변수는 setOprands밖에서는 접근할 수 없습니다.
		this.left=left;
		this.right=right;
	}
	public void sum() {
		System.out.println(this.left+this.right);
	}
	public void avg() {
		System.out.println((this.left+this.right)/2);
		
	}
}
public class CalculatorDemo4 {
	
	public static void main(String[] args) {
		//calculator라는 변수를 새로 만들어서  c1이라는 변수에 담았는데 (=인스턴스생성) 
		//그 변수는 calculator라는 객체를 담을 수 있는 데이터형식을 가지고있는 변수여야한다.
		Calculator c1=new Calculator();
		//setoperands라는 메소드에 10,20의 인자값을 전달함
		c1.setOprands(10,20);
		c1.sum();
		c1.avg();
		
		//인스턴스 생성
		Calculator c2=new Calculator();
		c2.setOprands(20,40);
		c2.sum();
		c2.avg();
	}

}



2개의 댓글

comment-user-thumbnail
2021년 3월 31일

클래스, 인스턴스, 객체 라는 것을 이렇게 이해하는게 좋을 거 같습니다.
1) 패키지 내에 클래스, 추상클래스가 있음.
2) 추상클래스로 만든 클래스 변수가 객체(=인스턴스).
https://cerulean.kkennib.com/149

1개의 답글