1-13. 객체지향언어 (2) 생성자

백종석·2022년 5월 18일
0

자바 문법 뽀개기

목록 보기
13/17
post-thumbnail

1) 생성자(constructor)

  • 메소드를 배웠으니 생성자에 대해서 배워보도록 하겠습니다. 생성자는 인스턴스가 생성될 때 사용되는 '인스턴스 초기화 메소드'입니다. 즉 new 와 같은 키워드로 해당 클래스의 인스턴스가 새로 생성될 때, 자동으로 호출되는 메소드입니다. 이 생성자를 이용해서 인스턴스가 생성될 때 수행할 동작을 코드로 짤 수 있는데요. 대표적으로 인스턴스 변수를 초기화 하는 용도로 사용합니다.

  • 생성자의 형식

    클래스이름 (타입 변수명, 타입 변수명, ...){
       인스턴스 생성 될 때에 수행하여할 코드
       변수의 초기화 코드
    }
    • 메소드에 대해서 앞에 배웠으니 메소드와 비교를 통해 특징을 눈치채신 분들도 계실겁니다! 😀
    • 생성자에게도 생성자만의 조건이 있기 때문에 이 부분을 따라줘야합니다!
      1. 생성자의 이름은 클래스명과 같아야 한다.
      2. 생성자는 리턴 값이 없다.
  • 지금까지 우리는 생성자에 대해서 모른채로 프로그래밍을 했습니다. 하지만 모든 클래스에는 반드시 하나 이상의 생성자가 있어야 합니다!

    어라? 우리는 만들지 않았는데 그럼 어떻게 오류가 나지 않았지? 라는 의문이 생기실 겁니다. 사실, 클래스에 생성자가 1개도 작성이 되어있지 않을 경우, 자바 컴파일러가 기본 생성자를 추가해주기 때문에 우리는 기본 생성자를 작성하지 않고도 편리하게 사용할 수 있습니다!

    👉 기본 생성자는 매개변수와 내용이 없는 생성자입니다.

    • [코드스니펫] 생성자 예제 - Phone, Main 함수

      class Phone {
          String model;
          String color;
          int price;
      }
      
      public class Main {
          public static void main(String[] args) {
              Phone galaxy = new Phone();
      
              Phone iphone = new Phone();
      
              System.out.println("철수는 이번에 " + galaxy.model + galaxy.color + " + 색상을 " + galaxy.price + "만원에 샀다.");
              System.out.println("영희는 이번에 " + iphone.model + iphone.color + " + 색상을 " + iphone.price + "만원에 샀다.");
          }
      }
    class Phone {
                String model;
                String color;
                int price;
           
                Phone(String model, String color, int price) {
                    this.model = model;
                    this.color = color;
                    this.price = price;
                }
            }
           
            public class Main {
                public static void main(String[] args) {
                    Phone galaxy = new Phone("Galaxy10", "Black", 100);
           
                    Phone iphone =new Phone("iPhoneX", "Black", 200);
           
                    System.out.println("철수는 이번에 " + galaxy.model + galaxy.color + " + 색상을 " + galaxy.price + "만원에 샀다.");
                    System.out.println("영희는 이번에 " + iphone.model + iphone.color + " + 색상을 " + iphone.price + "만원에 샀다.");
                }
            }
    • 생성자에서 사용된 this는 생성된 객체 자신을 가리키며 생성자의 매개변수의 값을 객체의 해당하는 데이터에 넣어주게 됩니다.

2) 인스턴스(멤버) 변수의 기본값

  • 앞의 <자료형> 챕터에서 배웠던 자료형들이 기억나시나요? class 에 선언된 변수는 instance 가 생성될 때 값이 초기화(initialize)됩니다. 이 때, 변수의 선언부나 생성자를 통해서 초기화를 해주지 않는다면, 기본값(default value)를 가집니다. 각 자료형마다 기본값이 다른데요. 한 번 확인하고 넘어가겠습니다.

    • [코드스니펫] 인스턴스 변수의 기본값 - Main
        class DefaultValueTest {
            byte byteDefaultValue;
            int intDefaultValue;
            short shortDefaultValue;
            long longDefaultValue;
            float floatDefaultValue;
            double doubleDefaultValue;
            boolean booleanDefaultValue;
            String referenceDefaultValue;
        }
        
        public class Main {
            public static void main(String[] args) {
                DefaultValueTest defaultValueTest = new DefaultValueTest();
                System.out.println("byte default: " + defaultValueTest.byteDefaultValue);
                System.out.println("short default: " + defaultValueTest.shortDefaultValue);
                System.out.println("int default: " + defaultValueTest.intDefaultValue);
                System.out.println("long default: " + defaultValueTest.longDefaultValue);
                System.out.println("float default: " + defaultValueTest.floatDefaultValue);
                System.out.println("double default: " + defaultValueTest.doubleDefaultValue);
                System.out.println("boolean default: " + defaultValueTest.booleanDefaultValue);
                System.out.println("reference default: " + defaultValueTest.referenceDefaultValue);
            }
        }

    코드스니펫을 모두 붙여넣고 실행을 시켜볼까요? 다음과 같은 결과를 볼 수 있습니다.

    byte default: 0 // 1byte 를 구성하는 8개의 bit가 모두 0이라는 뜻.
    short default: 0
    int default: 0
    long default: 0
    float default: 0.0
    double default: 0.0
    default: null

    💡 Reference Type의 변수에는 초기화를 해주지 않으면, 기본으로 할당되는(default) 값이 없습니다. null 이라는 것은 ""null"이라는 문자를 가진다는 것이 아니라 참조할 값이 없다는 것을 나타내는 Java 언어의 표현입니다.

profile
항해중인 우당탕탕 코린이

0개의 댓글