본문 바로가기
프로그래밍언어/JAVA

JAVA8 객체지향 - 생성자/정보은닉

by 스키피땅콩버터 2020. 12. 15.
반응형

1. 생성자

생성자는 객체를 생성할 때 초기화할 명령어의 집합을 코딩해 놓은 부분이 생성자라고 할 수 있다.

기본 생성자 

생성자의 역할 : (객체를)클래스를 instance로 만들 때 호출된다. (객체가 생성이 되면 이것을 instance화 라고 한다)

생성자 호출 : 일반 메서드 -> 참조변수를 이용해서 항상 호출 가능,  생성자 -> new로 호출

 

1-1.기본생성자 (Defualt Constructor)

클래스에 생성자가 하나도 없는 경우에는 나중에 컴파일러가 기본 생성자를 자동으로 만들어  줍니다.

이때 기본생성자는 매개 변수와 구현 코드가  하나도 없는 메서드로 만들어지며, 이러한 형식의 메서드는 컴파일러가 만들어주는 기본 생성자입니다.

- 생성자의 이름 = 클래스의 이름과 동일
- 생성자는 메서드가 아니다.
- 객체를 생성할 때만 호출한다.
- 상속되지 않으며, 리턴 값을 가지지 않음


*생성자의 기본 문법*
-----------------------------------------
<접근 제어자><클래스 이름>([<매개 변수>])
{
    [<statements>] <----수행할 코드를 적음
}
-----------------------------------------
 

 

하나의 클래스에는 반드시 하나이상의 생성자가 존재하게 되는데, 프로그래머가 생성자를 기술하지 않으면 기본 생성자가 자동으로 생긴다. (컴파일러가 코드에 넣어줌)

- 기본 생성자는 인수 및 구현부가 없음

- 만약 클래스에 아규먼트가 있는 다른 생성자를 추가하면 기본 생성자는 제공되지 않음

 

 

2. 생성자 오버로딩

생성자 오버로딩의 예

생성자의 이름이 동일하고 매개 변수만 다른 여러 개의 생성자를 선언하는 것 : 생성자 오버로딩이라고 한다. (Constructor Overloading)

참고 : 메서드에서도 동일하게 사용할 수 있다. ->  이름이 동일한 메서드의 매개 변수가 다른 경우 메서드 오버로딩 이라고 한다.

 

실행결과 :

 

 

주로 멤버 변수 초기화를 위한 생성자 구현 문법

-----------------------------------------

ex)

Person(String name) {

     this.name = name;

}

-----------------------------------------

 

3. 정보 은닉

public 키워드 특징 : 외부 클래스에서 생성자 메서드 접근을 무조건 전체 허용한다.

 

 

 

클래스 변수들 앞에 아무거도 없는 것은 같은 패키지 안에서만 허용하겠다는 뜻이다.

 

 

4.접근 제어자 

- private : 클래스 내부에서만 사용함(= 외부 클래스에서 접근 불가능)

private로 선언한 변수는 외부 클래스에서 접근할 수가 없기 때문에 정보 은닉(information hiding)이 구현됨

 

외부 클래스에서 이름을 변경하진 않지만 변수에 대한 정보만 가져와서 사용하고 싶을 때 : 메서드를 제공해 주면 된다.

 (메서드를 쓰는 입장에서 만들어야 한다.)

getNmae :  값을 가져오는 method

setName :  값을 집어넣는 method

 

 

* 모든 멤버 변수를 private으로 선언하지 않는 이유 : 외부에서 이변수를 접근하는데 제한을 가하기 때문에 변수가 오용되거나 함부로 변하는 것을 막을 수 있지만, 그렇다고 모든 변수를 private로  막고 필요에 의해서 getter setter을 제공하여 사용하는 것 보단 필요한 것만 private 로 선언하여 사용하는 것이 훨씬 더 유용하지 않을까 생각된다.

 

 

정보은닉(private) 활용한 경우

1. get만 제공하고, set은 제공하지 않으면 외부에서 값을 바꿀 수 없다.

2. 변수에 대한 오류를 막을 수 있다.

 

 

'프로그래밍언어 > JAVA' 카테고리의 다른 글

임의의 랜덤값 생성하기  (0) 2021.07.19
Java Stream  (0) 2021.03.15
Optional object생성 (isPresent())  (0) 2020.12.29
클래스와 인스턴스  (0) 2020.11.27
자바 시작하기  (0) 2020.10.03