[JAVA] 클래스와 this
1. 클래스
1-1. 클래스를 정의하면서 멤버변수에 값을 직접 대입하는 경우
- 앞 예제(Main01.java)는 객체를 생성함과 동시에 객체 안에 name 변수와 age변수가 할당된 값을 포함하게 된다.
- 같은 클래스로 객체를 여러개 생성할 경우, 모든 객체가 동일한 값을 갖게 된다.
- 같은 클래스를 통하여 생성된 객체라 할지라도 서로 다른 값을 대입하면 서로 독립적인 형태로 존재하게 된다.
1-2. 값이 대입되지 않은 멤버변수를 갖는 클래스
- 클래스란 객체를 위한 틀을 제공하는 것이기 때문에 클래스 작성 과정에서 멤버변수에 대입된 값은,
객체를 통하여 멤버변수의 값을 지정하기 전까지 사용될 "기본값"으로서의 의미이다.
- 객체를 통하여 새로운 값이 대입되면 클래스 작성시에 멤버변수에 대입한 값을 의미를 잃어버리게 된다.
- 때문에 일반적으로 클래스 작성시에는 멤버변수에 값을 지정하지 않는다.
1-3. 변수의 종류
- 멤버변수(=전역변수)
-> 클래스 안에서 선언된 변수로서, 클래스 블록 범위 안에서 유효한다.
- 지역변수
->메서드 안에서 선언된 변수로서, 메서드의 블록을 빠져나가지 못한다.
그러므로 다른 메서드는 해당 변수를 인식하지 못한다.
이 규칙은 조건, 반복문과 같은 블록{ }을 형성하는 모든 경우에 해당된다.
1-4. 메서드를 포함하는 클래스
- 메서드란 프로그램에서 하나의 동작 단위를 의미한다.
- 두 개 이상의 메서드가 서로 동일한 대상을 위해서 존재할 경우, 이 메서드들을 클래스에 포함시켜 그룹화할 수 있다.
- 클래스에 멤버변수와 메서드가 공존할 경우, 멤버변수는 모든 메서드가 공유하는 전역변수로 존재하게 된다.
1-5. 메서드만을 포함하는 클래스
- 객체 안에 멤버변수(=데이터)가 포함되지 않는다.
- 객체 안에 포함된 메서드를 호출하여 결과를 만들기 위한 목적이므로 굳이 여러개의 객체를 생성할 필요가 없다.
-> 계산 기능을 갖는 클래스의 예
class Calc{
int sum(int x, int y){
return x + y;
}
}
-> 기능의 활용 - 두 개의 값을 위하여 객체를 각자 생성하는 경우
Calc c1 = new Calc();
int a = c1.sum(100, 200);
Calc c1 = new Calc();
int b = c2.sum(200, 300);
- 파라미터에 의해 결과를 리턴하는 경우, 서로 다른 값을 위하여 객체를 여러개 생성할 필요가 없다.
- 자체적으로 데이터를 갖는 형태가 아니라 외부적인 요인인 파라미터에 의해서 결과가 생성되므로,
하나의 객체를 재사용하는 것이 바람직하다.
Cal c1 = new Cal();
int a = c1.sum(100, 200)
int b = c1.sum(200, 300)
1-6. this
- 자기 자신을 의미하는 키워드
- 클래스 안에서 this를 사용하여 "자기자신"을 표현한다.
- this를 사용하여 지역변수와 멤버변수(전역변수)를 구분하기
class Foo{
String name; // 전역변수
public void setName(){
int age; // 지역변수
String name; // 지역변수
name = "자바학생";
this.name = "JSP학생"; // 전역변수에 할당
}
}
-> 멤버(전역)변수와 지역변수가 동일한 이름으로 공존할 경우, 유효성 범위가 작은 변수가 우선적으로 인식된다.
-> this.name은 현재 클래스 자신의 변수, 즉 멤버변수로 선언된 name을 의미한다.
- this를 사용하여 파라미터와 멤버변수 구분하기
-> 파라미터도 해당 메서드 안에서만 유효한 지역변수의 일종이다.
-> 파라미터를 사용하여 멤버변수의 값을 간접적으로 설정하고자 할 경우,
변수의 이름을 서로 다르게 사용하는 것보다는 이름은 동일하게 지정하고 this키워드를
사용하여 멤버변수와 파라미터를 구별하는 것이 java언어의 일반적인 처리 방식이다.
class Foo{
String name;
public void setName(String name){
this.name = name;
}
}
-> 모든 멤버변수 앞에는 this 키워드를 사용하여 멤버변수임을 직관적으로 표시하는 것이
소스코드의 가독성을 위하여 바람직하다.