Class
- Class 개념
- Class 변수와 메서드
1. class란?
동일한 자료형만을 담을 수 있는 ‘배열’과는 달리 class는 서로 다른 자료형의 변수뿐만 아니라 메서드 또한 담을 수 있다
따라서 class를 활용하여 꼭 필요한 부품(메서드,변수)들을 서로 연관되어 있는것끼리 묶어 중복없이 class에 저장할 수 있게되고 이를 “capsulation”이라 한다
이는, 코드의 불필요한 중복을 피하고 “재활용성”을 높힌다
// Student class
public class Student {
String name;
int kor, eng, math;
int total;
double avg;
int calTotal() { // class안의 메서드
total = kor+eng+math;
return total;
}
double calAverage() { //class안의 메서드
avg = (double)total/3;
return avg;
}
}
//main
public static void main(String[] args) {
Student s = new Student(); // class 선언
s.name = "홍길동"; // class 객체 접근법
s.kor = 100;
s.eng = 88;
s.math = 77;
System.out.println("총점 :"+s.calTotal());
}
2. class 객체 생성 및 접근
class를 생성한 후 이를 main에서 호출하여 변수에 담는 과정 즉, 변수에 실제로 메모리를 적재하는 과정 아래의 코드를 보면 s라는 변수는 Student라는 클래스를 자료형으로 가지며 new라는 생성자에 의해 Student class에 의해 생성된 객체를 뜻 한다. 즉 클래스를 만든다는 것은 사용자 정의 데이터 타입을 만드는 것과 같은 의미다
Student s = new Student();
생성된 객체를 통해 클래스 멤버변수에 접근하는 방법은
s.name = "홍길동"; // 객체이름.클래스멤버변수
s.kor = "100";
3. class 변수와 메서드
클래스 내부에서도 변수와 메서드를 선언할 수 있다 아래의 코드를 보면, class내에서 a,b,basic의 변수가 선언되어있고 static의 유무차이가 존재한다
class Calculator {
int a = 50;
int b = 50;
static int basic;
public void sum_1(int c , int d){ // method 1
re = a + b + c + d;
System.out.println(re);
}
public void sum_2(int a, int b){ //ethod 2 // a,b,basic 3가지 인자가 필요하지만 baisc은 static로 설정해두었다
re = a + b + basic;
System.out.println(re);
}
}
//============================================================================================================
public class main_class { // main
public static void main(String[] args) {
Calculator cal = new Calculator(); // 객체 생성
//cal.a = 10; // 이런식으로 접근하여 클래스 변수의 값을 수정가능
//cal.b = 30; // 클래스내부에 초기값이 정해져있는 경우에 초기값을 수정하기 위해서?
Calculator.basic = 30; // static basic을 통한 함수명 접근 // 객체 생성하지 않아도 접근 가능
cal.sum_1(30,40); // 변수명은 상관없다고 알고 있었으나 클래스 내부에서 선언된 int a,b의 경우 그대로 클래수내부 메서드에 대입된다. 따라서 30,40은 c,d로 대입된다
cal.sum_2(100,300);
}
}
위 코드를 보면 클래스 멤버변수로 a,basic은 초기값을 설정해 두지 않았고 b는 초기값을 20으로 주었다.
sum_1메서드에서 인자값을 1개만 입력받도록 한다면 main에서 호출된 메서드(인자)에 의한 값 한가지와 클래스멤버변수에서 설정된 초기값에 의해 실행이 된다
sum_2메서드의 인자 값으로 int a,b를 받아온다고 설정해놓았다. 그런데 이 경우 cal.sum_2(100,300)은 cal.a = 100, cal.b=300 과 같은 의미 아닌가?
두 코드의 의미가 다른 이유는 sum_2메서드는 무조건 int a,b의 인자를 받는다고 설정해 놓았다. 따라서 cal.a,cal.b를 통해 a,b값을 변경하더라도 sum_2메서드는 메서드 실행시 입력 된 인자값에 의해 실행 될 것이다