1. 클래스(Class)
1-1. 객체를 구성하는 단위
- 객체를 이루는 것은 "데이터"와 "기능"
- 데이터는 변수로 표현한다.
- 객체안에 포함된 변수를 '필드', '멤버변수', '프로퍼티'라고 한다.
- 기능은 메서드(=함수)로 표현된다.
1-2. 클래스의 기본 작성법
class 클래스이름{
멤버변수;
void 메서드이름(){
....
}
}
- 'class'라는 예약어와 클래스의 이름을 명시{...}블록을 구성한다.
- 멤버변수는 여러개 존재할 수 있다.
이때 값을 선언과 동시에 할당할 수도 있고 객체를 통해 간접적으로 할당할 수도 있다.
- 메서드는 여러개 존재할 수 있다.
- 클래스안에 포함된 멤버변수와 메서드를 특성에 따라 그룹화 하기 위한 기법이 클래스를 작성하는 것이라고 이해할 수 있다.
1-3. 객체의 생성방법
1-4. 객체의 사용
-
객체안에 포함된 변수나 메서드는 점(.)으로 연결하여 접근한다.
-
객체안에 멤버변수 접근
객체이름.멤버변수;
std1.name;
std1.age;
std2.name;
std2.age;
String username = std1.name;
-
객체안에 포함된 변수의 값에 따른 값을 대입하는 경우
객체이름.멤버변수 = 값;
std1.name = "김자바";
-
객체안에 포함된 메서드 호출
객체이름.메서드이름();
-
객체안에 포함된 메서드에 파라미터 전달
객체이름.메서드이름(값1,값2,....);
1-5. null
- 참조변수가 "어떤객체도 가리키지 않음"을 나타냄
1-6. 값이 대입되지 않는 멤버변수를 갖는 클래스
- 클래스란 객체를 위한 틀을 제공하는 것이기 때문에
클래스 작성과정에서 멤버변수에 대입된 값은
객체를 통하여 멤버변수의 값을 지정하기 전까지 사용된
"기본값" 으로서의 의미이다.
- 객체를 통하여 새로운 값이 대입되면 클래스 작성시에
멤버변수에 대입한 값은 의미를 잃어버리게 된다.
- 때문에 일반적으로 클래스 작성시에는 멤버변수에 값을
지정하지 않는다.
1-7. 메서드를 포함하는 클래스
- 메서드란 프로그램에서의 "하나의 동작 단위"를 의미한다.
- 두 개 이상의 메서드가 서로 동일한 대상을 위해서 존재할 경우,
이 메서드들을 클래스에 포함시켜 그룹화 할 수 있다.
- 클래스에 멤버변수와 메서드가 공존할 경우,
멤버변수는 모든 메서드가 공유하는 "전역변수"로 존재하게 된다.
1-8. 변수의 종류
-
멤버변수(=전역변수)
: 클래스 안에서 선언된 변수로서, "클래스 블록범위 안"에서 유효하다.
-
지역변수
: 메서드 안에서 선언된 변수로서, 메서드의 블록을 빠져나가지 못한다.
그러므로 다른 메서드는 해당 변수를 인식하지 못한다.
이 규칙은 조건, 반복문과 같은 블록 {}을 형성하는 모든 경우에 해당된다.
1-9. 메서드만의 포함하는 클래스
- 객체 안에 멤버변수(=데이터)가 포함되지 않습니다.
- 객체 안에 포함된 메서드를 호출하여 결과를 만들기 위한 목적이므로
여러개의 객체를 생성할 필요가 없다.
2. 은닉성
2-1. 은닉성이란?
- 멤버변수나 메서드가 객체에 노출되지 않도록 설정하는 기법
- 실수로 인한 오작동 방지를 위해
클래스일부를 숨기는 처리를 말한다.
2-2. 적용방법
3. getter, setter 메서드
- 멤버변수가 은닉된 형태로 선언된 경우
프로그램의 가장 근본적인 목적인 데이터에
접근하는 방법이 사라지므로 메서드를 통하여
간접적으로 접근하는 방법이 마련되어야 한다.
- getter, setter는 "은닉된 멤버변수에 간접적으로 접근하기 위하여" 정의된 메서드들을 의미하는 용어
- getter
: 은닉된 멤버변수값을 리턴하기 위한 메서드
- setter
: 파라미터로 전달된 값을 멤버변수애 복사하기 위한 메서드
3-1. 메서드 작성예
String userName; // 멤버변수
public String getUserName(){ // getter
}
public void setUserName(String userName){ // setter
}
int userAge; // 멤버변수
public int getUserAge(){ // getter
}
public void setUserName(int userName){ // setter
}
3-2. getter, setter 사용이유
3-3. 클래스에 접근한정자 지정한 경우
- public : 객체 생성 가능하다.
서로 다른 소스코드에 정의된 클래스끼리도
객체 생성이 가능하다.
- private : 클래스에 적용불가
- protected : 클래스에 적용불가
- default : 동일한 소스코드에 정의된 클래스끼리만
객체로 생성 가능하다.
4. 클래스의 분리
- 하나의 소스코드에서 프로그램 모든기능을 구현하게 되면
유지보수에 비효율적이므로, 기능단위로 소스코드를 분리해야 한다
- 다른패키지 내에서 소스코드가 분리된 클래스끼리는
public이 명시되어야만 서로 객체생성가능하다
- 일반적으로 클래스정의에는 public 접근 한정자만 사용할 수 있다.
- 하나의 소스코드는 하나의 public 클래스만 존재할 수 있다.
5. 상속성
5-1. 클래스간에 상속
- 클래스간에는 부모-자식의 상속관계를 설정할수있다.
- 부모클래스A를 자식 클래스B가 상속받을때
B는 A의 모든 멤버변수와 메서드를 자신의 것으로 상속받게 된다.
(단, private로 설정된 기능은 상속되지 않는다)
- 상속가능여부: public, protected
- B는 A의 public, protected 기능들을 직접적으로 코딩하지
않더라도 자신의 것으로 사용할 수 있게 된다.
5-2. 상속정의방법
5-3. 클래스 다이어그램을 통한 상속의 표현
- 클래스의 구조를 표현하는 클래스 다이어그램에서
상속은 자식클래스가 부모클래스를 가리키는 화살표로 표현한다.
- 상속관계가 이뤄질때 부모클래스를 "super 클래스"라고 한다.

5-4. 상속의 활용
- 기존에 존재하는 클래스의 소스 수정없이 기능을 확장하고자 하는 경우
- 클래스 다이어그램에서 CalcChild 클래스는 CalcParent클래스를 상속받기때문에 별도 소스코딩 없이도 plus() 메서드와 minus() 메서드를 포함하게 된다.
- CalcChild클래스에 times()메서드와 divide()메서드를 추가하면, 상속받은 메서드에 새로운 기능을 추가하는 효과를 얻을 수 있다.
- 여러개의 클래스에서 공통되는 기능을 추출하여 공유하기
