210105_JAVA

정재현·2021년 1월 5일
0

TIL

목록 보기
36/80

오늘은 화요일.
퇴근하고 너무 피곤해서 잠깐 누웠는데 알람을 못듣고 계속 자버렸다;;
자고 일어나면 컨디션이 좋아야하는데 어제 오랜만에 운동도 하고 이것저것 했나 컨디션이 좋질 않았다.

오늘은 169페이지~ 174페이지.

클래스에서 인스턴스 구분자와 초기화 하는 법을 통해
메소드를 좀 더 효율적으로 사용할 수 있는 법을 알았다.
그리고 생성자를 통해 초기화하는 방식을 봤는데 사실 여태까지 생성자(Constructor) 의 존재를
정확하게 알지 못했다.
찾아봐도 항상 그냥 디폴트의 의미만을 알고 넘어갔는데 이번에 정확히 알게되었다.

우선 생성자가 되기 위한 조건이 있는데

  • 생성자의 이름은 클래스의 이름과 동일해야 한다.
  • 생성자는 값을 반환하지 않고 반환형도 표시하지 않는다.

위의 두 조건을 만족하게 되면 자바 컴파일러에 의해서 생성자로 인식된다.
따라서 인스턴스 생성 시 자동으로 호출되어 인스턴스를 초기화하게 되는 것이다.

예를 들면,

class BankAccount { // 클래스
    String accNumber; // 계좌번호
    String ssNumber; // 주민번호
    int balance = 0; // 예금 잔액
    
    public BankAccount(String acc, String ss, int bal) {
    	accNumber = acc;
        ssNumber = ss;
        balance = bal;
        }
        ...
}

뭐 이런식이다.
그럼 이제 BankAccount 에 있는 메서드를 사용하려면 참조변수와 객체화 해서 선언해주면 생성자를 통해 초기화하게 되는 것.

예를 들면,

BankAccount jaehyeon = new BackAccount("12-34-56", "960902-1111111", 100);

이런식!
그런데 내가 여태껏 봐온 생성자들은 보통 비어있는게 대부분이였다.
그래서 헷갈렸던 것인데,

예를 들면,

class BankAccount { // 클래스
    String accNumber; // 계좌번호
    String ssNumber; // 주민번호
    int balance = 0; // 예금 잔액
    
    public BankAccount() {
    
        }
        ...
}

이런식 ㅇㅇ
이런걸 컴파일러에 의해 자동 삽입되는 '디폴트 생성자' 라고 한다.
인자를 전달받지 않는 형태로 정의되어 삽입되는데, 역시 내부적으로 코드가 비어있으니 하는일도 없다.
하지만 디폴트 생성자가 생성됨으로 인해서 인스턴스의 생성 규칙인 '생성자의 호출' 유지가 된다.

그렇지만 아주 예외적인 상황이 아니라면, 생성자가 필요 없는 클래스는 잘 정의된 클래스가 아닐 확률이 높기때문에 디폴트로 냅두지 않는것을 권장한다고 책에는 나와있다.

개찰구도 init을 해주기는 했지만 같은 클래스 안에서 생성자를 통해 init하면 더 좋으려나..?

오늘은 여기까지하고 내일은 자바의 이름규칙을 간단히 보고 책에 있는 문제를 코딩할 예정이다.

오늘의 코멘트: 친숙하면서 친숙하지 않은 생성자.

profile
"돈받고 일하면 프로다"

0개의 댓글