[Java] 클래스 객체 생성자 은닉성
📌 들어가며
객체지향의 핵심인 클래스·객체·생성자·은닉성(캡슐화)을 체계적으로 정리하는 복습 편이다. 이름 규칙, this, getter/setter, 접근 한정자, 자바빈즈까지 한 번에 훑는다.
1. 객체와 클래스
동일한 설계로 만든 자동차라도 각 부품은 형태만 같을 뿐 독립적으로 존재한다. 마찬가지로, 여러 객체의 멤버변수는 이름은 같아도 실제 값은 서로 다르다.
클래스 작성과 객체 사용
1
2
3
4
class 클래스이름 {
멤버변수; // 여러 개 가능
void 메서드이름() { ... } // 여러 개 가능
}
1
2
3
4
클래스이름 객체이름 = new 클래스이름(); // 선언 + 할당
값 = 객체이름.멤버변수; // 변수 접근
객체이름.메서드이름(값1, 값2, ...); // 메서드 호출
💡 클래스는 객체를 위한 틀이다. 클래스 작성 시 멤버변수에 대입한 값은 “기본값”일 뿐, 객체를 통해 새 값이 들어오면 의미를 잃는다. 그래서 보통 클래스 작성 시 멤버변수에 값을 지정하지 않는다.
메서드만 있는 클래스는 재사용
데이터 없이 파라미터로 결과를 만드는 클래스는 객체를 여러 개 만들 필요 없이 하나를 재사용하는 게 바람직하다.
1
2
3
4
5
6
7
class Calc {
int sum(int x, int y) { return x + y; }
}
Calc c1 = new Calc();
int a = c1.sum(10, 20);
int b = c1.sum(100, 200); // 같은 객체 재사용
변수의 종류
| 종류 | 유효 범위 |
|---|---|
| 멤버변수(전역) | 클래스 블록 전체 |
| 지역변수 | 선언된 메서드/블록 안에서만 |
2. this
this는 “자기 자신”을 의미하는 키워드로, 지역변수와 멤버변수를 구분할 때 쓴다.
1
2
3
4
5
6
class Foo {
String name; // 멤버변수
public void setName(String name) { // 파라미터(지역변수)
this.name = name; // this.name = 멤버, name = 파라미터
}
}
💡 멤버변수와 지역변수가 같은 이름이면 유효 범위가 작은(지역) 변수가 우선된다. 그래서 파라미터로 멤버변수를 설정할 때, 이름을 다르게 하기보다 같게 두고
this로 구분하는 것이 자바의 일반적인 방식이다. 가독성을 위해 멤버변수 앞에는this를 붙이는 게 좋다.
this는 현재 클래스의 다른 메소드를 호출할 때도 쓴다. (다만 메소드는 이름만으로도 호출 가능해 생략해도 무방)
1
String myName = this.getName(); // 현재 클래스의 getName() 호출
3. 이름 규칙
| 대상 | 규칙 | 예 |
|---|---|---|
| 공통 | 영어+숫자+_, 첫 글자 영어 | |
| 클래스 | 첫 글자 대문자, 단어마다 대문자 | MyClass, Student |
| 메서드·변수 | 소문자 시작, 단어마다 대문자 | userName, memberCount |
| 상수 | 모두 대문자 | PI, COLOR |
4. 생성자
생성자:
new로 객체가 생성될 때 자동으로 실행되는 특수 메소드. 리턴형이 없고, 이름은 클래스와 같다. 주로 멤버변수 초기화에 사용한다.
| 종류 | 설명 |
|---|---|
| 기본 생성자 | 파라미터 없음. 생성자를 정의 안 하면 컴파일러가 자동 생성 |
| 파라미터 생성자 | 파라미터로 객체를 외부에서 초기화 |
1
2
3
4
5
6
7
8
9
class Foo {
String name;
int age;
Foo(String name, int age) { // 파라미터 생성자
this.name = name;
this.age = age;
}
}
Foo obj = new Foo("자바학생", 30); // 생성 시 파라미터 전달
5. 은닉성 (캡슐화)
은닉성: 멤버변수나 메소드를 외부에 노출하지 않도록 숨기는 기법. 사용하는 쪽의 실수로 인한 오작동을 방지한다.
접근 한정자
| 한정자 | 접근 범위 | 관례 |
|---|---|---|
public | 모든 곳 | 메서드에 명시 |
private | 클래스 내부만 | 멤버변수에 명시 |
protected | 같은 패키지 + 하위 클래스 | 잘 안 씀 |
default | 같은 패키지 | 잘 안 씀 |
getter / setter
멤버변수를 private으로 숨기면 접근 방법이 사라지므로, 메소드로 간접 접근한다.
| 멤버변수 | Getter | Setter |
|---|---|---|
String userName | String getUserName() | void setUserName(String p) |
int userAge | int getUserAge() | void setUserAge(int p) |
💡
get/set접두사 뒤에 변수 이름을 첫 글자 대문자로 붙인다. getter는 변수 타입을 리턴형으로, setter는 변수 타입을 파라미터형으로 명시한다.
클래스와 접근 한정자
| 한정자 | 클래스에 적용 시 |
|---|---|
public | 다른 소스코드에서도 객체 생성 가능 |
default | 같은 소스코드끼리만 객체 생성 가능 |
private·protected | 클래스에 적용 불가 |
💡 유지보수를 위해 기능 단위로 소스를 분리하며, 분리된 클래스끼리는
public이어야 객체 생성이 된다. 하나의 소스코드에는 하나의 public 클래스만 존재할 수 있다.
6. 자바빈즈 (Java Beans)
자바빈즈: 재사용 가능한 표준 컴포넌트 모델. 개발 도구가 클래스를 연결·재사용·재배치할 수 있게 하는 관례를 따른다.
지켜야 할 관례:
- 클래스는 생성자를 가져야 한다.
- 속성은 get/set 명명법을 따르는 메소드로 접근할 수 있어야 한다.
📝 정리
1
2
3
4
5
6
클래스·객체·생성자·은닉성
├─ 클래스/객체 틀(class) → 실체(new), 멤버는 객체마다 독립
├─ this 자기 자신, 멤버-지역 변수 구분
├─ 생성자 new 시 자동 실행, 초기화 담당 (기본/파라미터)
├─ 은닉성 private + getter/setter로 간접 접근
└─ 자바빈즈 생성자 + get/set 관례를 따르는 재사용 컴포넌트
| 개념 | 한 줄 정의 |
|---|---|
| this | 자기 객체 참조, 멤버-지역 구분 |
| 생성자 | 객체 생성 시 자동 초기화 |
| 은닉성 | private으로 감추고 getter/setter로 접근 |
| 자바빈즈 | get/set 관례를 따르는 표준 컴포넌트 |
클래스·객체·생성자·은닉성은 객체지향의 뼈대다. 특히 “클래스는 틀, 멤버는 객체마다 독립”, 그리고 은닉성을 위한 getter/setter 패턴은 앞으로 계속 만나게 될 핵심 원리다.

Comments powered by Disqus.