클래스는 객체를 만들기 위한 일종의 설계도입니다. (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();
}
}
클래스, 인스턴스, 객체 라는 것을 이렇게 이해하는게 좋을 거 같습니다.
1) 패키지 내에 클래스, 추상클래스가 있음.
2) 추상클래스로 만든 클래스 변수가 객체(=인스턴스).
https://cerulean.kkennib.com/149