[코드스쿼드 코코아 과정] 초기화와 생성자

Kyu·2020년 11월 11일
0

초기화와 생성자

초기화

Calculator c1 = new Calculator();
c1.setOprands(10, 20);
c1.sum();       
c1.avg();   

c1 이라는 객체를 생성해주고, sum()avg()를 호출하기 위해 setOprands에 인자들을 넣어주는게 이 객체의 사용방법이다. 그런데 다른 사람이 쓸 때 아마 어떻게 사용할지 모르거나해서, setOprands를 적지 않고 ▼다음과 같이 실수할 가능성이 있는 코드를 어떻게 하면 실수를 줄일 수 있는 코드로 바꿀 수 있을까?

Calculator c1 = new Calculator();
c1.sum();       
c1.avg();

생성자

그래서 사용하는 것이 생성자(constructor)이다. 생성자를 이용하면 다음과 같이 작성해서 사용자의 실수를 줄일 수 있을 것이다.▼

Calculator c1 = new Calculator(10, 20);
c1.sum();       
c1.avg();

어떻게 생성자를 사용하는 것일까?

class Calculator {
    int left, right;
 
    public Calculator(int left, int right) {
        this.left = left;
        this.right = right;
    }
 
    public void sum() {
        System.out.println(this.left + this.right);
    }
 
    public void avg() {
        System.out.println((this.left + this.right) / 2);
    }
}
 
public class CalculatorDemo1 {
 
    public static void main(String[] args) {
 
        Calculator c1 = new Calculator(10, 20);
        c1.sum();
        c1.avg();
 
        Calculator c2 = new Calculator(20, 40);
        c2.sum();
        c2.avg();
    }
 
}

여기에서 ▼다음 코드에 집중해보자

class Calculator {
    int left, right;
 
    public Calculator(int left, int right) {
        this.left = left;
        this.right = right;
    }

첫번째 주목해야할 점은 클래스의 이름과 메소드의 이름이 Calculator로 둘 다 같다는 점이다. 여기서 메소드를 만들면서 "생성자"를 만들어 주었다는 뜻이고, 클래스가 실행이 되면 생성자를 그 어떤 메소드보다 가장 먼저 실행되도록 약속 돼 있다. 그래서 생성자를 클래스가 가장 먼저 실행함으로써, 그 객체가 가장 먼저해야 할 일, 다시 말해서, 초기화 작업을 먼저 하도록 할 수 있다는 뜻이다.

그리고 Calculator c1 = new Calculator(10, 20);에서 우항에 있는 Calculator는 사실 클래스가 아니라 생성자라고 할 수 있다. 그리고 괄호 안에 인자를 넣어주는 것은 그것이 생성자라는 것을 더욱 명확하게 하고 있다.

객체에서 먼저해주어야 할 작업이 있다면, 숙지해야할 사항을 더 줄이고 반드시 해야할 일을 놓치지않도록 생성자를 사용할지 고민해볼 수 있겠다.


정리

🌟한줄 정리 : 객체에서 어떤 값들을 초기화 해야할 필요성이 있다고 느낀다면 생성자를 사용

초기화란? 선언한 객체에 최초로 값을 할당해주는 것
생성자란? 클래스에서 가장 먼저 실행해서 필드변수를 초기화해주는 메소드

❓질문: 생성자를 사용안하고 처음에 그 값을 지정해주면 안되나? 왜 굳이 생성자를 사용할까?

profile
TIL 남기는 공간입니다

0개의 댓글