ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 생성자 + 캡슐화의 개념
    JAVA/클래스 ( 기본 ) 2023. 5. 3. 12:32
    728x90

    생성자란

    생성자란 클래스를 통해 인스턴스가 생성될 때, 실행되는 것

     

    목적

    인스턴스 생성시 멤버변수 초기화의 용도로 쓰임

     

     

     

    생성자도 일종의 메소드와 비슷한데, 따로 호출해주는 것이 아니라 인스턴스가 생성될 때 실행된다.

    생성자는 기존의 메소드와는 특이하게 클래스의 이름을 그대로 따라간다.

    public class Circle {
    
        // 속성 -> 변수(필드, 멤버변수)
        public double radius;
    
        // 생성자
        public Circle(){
            System.out.println("Circle() 생성자 호출");
            System.out.println("반지름 값: " + radius);
        }
    
        // 생성자 오버로딩 가능
        public Circle(double radius){
        	System.out.println("Circle(" + r + ") 생성자 호출");
            this.radius = radius;     //맴버변수 초기화
            System.out.println("반지름 값: " + radius);
        }
        
     }
    오버로딩
    메소드의 SIgniture 중 매개변수의 list를 다르게 하여 동일한 이름의 여러 메소드를 정의하는 것을 말함
    메소드의 매개변수의 list : 매개변수의 타입, 매개변수의 갯수

     

    이제 해당 클래스로 인스턴스를 만들어보자

    public class Test {
        public static void main(String[] args) {
            Circle c1 = new Circle();
            // 결과
            // Circle() 생성자 호출
    		// 반지름 값: 0.0
            
            Circle c2 = new Circle(3);
            // 결과
            // Circle(3.0) 생성자 호출
    		// 반지름 값: 3.0
        }
    }

    보는 것처럼 인스턴스를 new 연산자로 생성하는 것만으로도 생성자가 실행이 된 것을 확인 할 수 있다.

    c2 객체를 보면, radius 멤버변수가 3으로 초기화 된 것을 확인할 수 있다. 생성자는 이렇게 멤버변수의 초기화의 용도로 사용된다.

     

     

    유의사항

    클래스를 만들 때, 생성자를 따로 만들지 않으면
    '디폴트 생성자(default constructor)'를 자동으로 만들어줌.

    디폴트 생성자란 : 매개변수가 없는 생성자. 모든 멤버변수는 기본값으로 초기화

    아무런 생성자 없다면, 디폴트 생성자를 자동으로 만들어주고, 모든 값을 타입에 맞게 초기화 한다.

     

    (주의)

    클래스에서 하나 이상의 생성자를 만들게 된다면,
    자동으로 디폴트 생성자를 만들어주지 않는다

    (권장) 아무일도 안하더라도 디폴트 생성자는 반드시 만들어 주자.

     

     

     

    캡슐화

    클래스 안에 필요한 '속성' 과 '행동' 을 멤버로 묶고 외부에서의 '직접적인 접근을 제한'하여
    객체의 데이터 와 메소드를 은닉(hiding)하고, 사용자에게는 필요한 기능만 제공하는 객체지향 기술을
    '캡슐화(encapsulation)' 라고 한다

    위에서 Circle 클래스의 필드인 radius 변수는 쉽게 접근이 가능하다.

    Circle c1 = new Circle();
    Circle c2 = new Circle(3);
    
    System.out.println(c2.radius);
    // 결과
    // 3.0
    
    c2.radius = 6;
    System.out.println(c2.radius);
    // 결과
    // 6.0

    하지만 약사가 약을 만들고 고객에게 약을 팔 때, 모든 정보를 알려주고 약의 내용물을 모두 바꿀 수 있도록 하지는 않는다.

     

    약의 성분은 표시만 하고 바꿀 수 없게 하며, 고객은 약사가 만들어준 약의 성분을 바꾸지 않고 먹어야 한다.

     

    대신, 약의 허용치가 2~ 3알이라면, 사용자가 이정도는 2알 3알을 스스로 조절하면서 먹을 수 있다.

     

    바로 이렇게 사용자가 수정할 수 있는 부분은 수정하도록 하고 , 수정하지 말아야 하는 부분을 감추는 객체지향기술을

    "캡슐화"라고 한다

     

     

     

    캡슐화를 가능하게 해주는 접근 제한자(access modifier)를 학습하고 그 이후에 한번 캡슐화를 다시 해보기로 하자

     

    'JAVA > 클래스 ( 기본 )' 카테고리의 다른 글

    클래스란?  (0) 2023.05.03
Designed by Tistory.