프로그램에서 표현하고자 하는 기능을 묶기 위한 단위
객체가 중심이 되는 프로그래밍 기법
객체를 생성하기 위해서는 객체의 설계도가 필요하다.
class 클래스이름 {
멤버변수;
void 메서드이름( ) {....}
}
객체의 선언
클래스 이름 객체 이름;
객체의 할당
객체 이름 = new 클래스이름( );
선언과 할당의 통합
클래스이름 객체이름 = new 클래스이름( );
객체 안에 포함된 변수나 메서드는 점 ( . ) 으로 연결하여 접근한다.
( std2.name = "오라클학생"; )
객체안에 포함된 변수의 값을 다른 변수에 복사하는 경우
변수 = 객체이름.멤버변수;
객체안에 포함된 변수의 값에 다른 값을 대입하는 경우
객체이름.멤버변수 = 값;
객체 안에 포함된 메서드를 호출하는 경우
객체이름.메서드이름( );
객체 안에 포함된 메서드에 파라미터를 전달하는 경우
객체이름.메서드이름(값1, 값2, ... );
같은 클래스를 통하여 생성된 객체라 할지라도 서로 다른 값을 대입하면 서로
독립적인 형태로 존재하게 된다.
값이 대입되지 않은 멤버변수를 갖는 클래스
-> 클래스란 객체를 위한 틀을 제공하는 것이기 때문에, 클래스 작성과정에서 멤버변수에
대입된 값은, 객체를 통하여 멤버변수의 값을 지정하기 전까지 사용될 "기본값"으로서의 의미이다.
-> 객체를 통하여 새로운 값이 대입되면 클래스 작성시에 멤버변수에 대입한 값은 의미를
잃어버리게 된다.
-> 때문에 일반적으로 클래스 작성시에는 멤버변수에 값을 지정하지 않는다.
메서드란 프로그램에서 하나의 동작 단위를 의미한다.
두 개 이상의 메서드가 서로 동일한 대상을 위해서 존재할 경우,
이 메서드들을 클래스에 포함시켜 그룹화 할 수 있다.
클래스에 멤버변수와 메서드가 공존할 경우, 멤버변수는 모든 메서드가 공유하는 전역 변수로 존재하게 된다.
변수의 종류 -> 멤버변수(=전역변수)
: 클래스 안에서 선언된 변수로서, 클래스 불록범위 안에서 유효하다.
-> 지역변수
: 메서드 안에서 선언된 변수로서, 메서드의 블록을 빠져나가지 못한다.
그러므로 다른메서드는 해당 변수를 인식하지 못한다. 이 규칙은 조건, 반복문과 같은 블록 { }을
형성하는 모든 경우에 해당한다. ex) ( for (int i .... ) i = 지역변수
객체 안에 멤버변수(=데이터)가 포함되지 않는다.
객체안에 포함된 메서드를 호출하여 결과를 만들기 위한 목적이므로, 굳이 여러 개의 객체를 생성할 필요가 없다.
클래스 안에서 this 를 사용하여 "자기자신"을 표현한다
class User {
String name; // name : 전역 변수
public void setName( ) {
String name; // name : 지역 변수
name = "사용자"; --> name : 지역변수
this.name = "자바학생"; ->> 전역변수
}
}
//멤버변수 (전역변수)와 지역변수가 동일한 이름으로 공존할 경우, 유효성의 범위가
//작은 변수가 우선적으로 인식된다.
class Student{
String name; // 전역변수
public void setName ( String name ) {
this.name = name;
}
}
파라미터도 해당 메서드 안에서만 유효한 지역변수의 일종이다.
파라미터를 사용하여 멤버변수의 값을 간접적으로 설정하고 할 경우에는,
변수의 이름을 서로 다르게 사용하는 것보다는 이름은 동일하게 지정하고
this 키워드를 사용하여 멤버변수와 파라미터를 구별하는것이 java언어의 일반적인 처리 방식이다.
모든 멤버변수 앞에는 this 키워드를 사용하여 멤버변수임을 직관적으로 표시하는 것이
소스코드의 가독성을 위해서 바람직하다.
대부분 소문자로 구성되지만, 두 개 이상의 단어를 조합할 경우 새로운 단어는 대문자로 표시한다.
int age; / String userName; / string memberCount;
동사 + 명사
getName( )
setUserName( )
모두 대문자로 표시한다.
final double PI;
final int COLOR;
new 키워드를 사용하여 객체가 생성될 때 자동으로 실행되는 특수한 형태의 메서드
리턴형을 명시하지 않으며, 메서드의 이름은 클래스와 동일하다.
User user = new User( );
class User{
User( ) { -> 생성자
// 이 안은 객체가 생성될 때 자동으로 호출된다.
}
}
자동으로 실행된다는 특성 때문에, 객체가 생성되면서 해당 객체의 특성을 초기화 하기 위하여 사용된다.
( ex: 멤버변수의 초기값을 할당하는 용도)
User u = new User ( ); -> 아래의 User ( )
-------
class User {
User ( ) { // 생성자는 있지만, 내용은 비어있다.
}
}