[java] 생성자, this,

이영주·2021년 4월 12일
0

JAVA

목록 보기
4/5

생성자의 역할

  1. 인스턴스를 생성한다.
  2. 인스턴스의 속성(인스턴스 변수)들을 초기화 시킨다.

기본 생성자

생성자를 한개도 정의하지 않았을 경우 자바에서 자동으로 기본 생성자를 제공해준다. 하나라도 생성자를 정의하면 아래 기본 생성자는 사용할 수 없게 된다.

Person p1 = new Person();

생성자 오버로딩

파라미터의 구성을 다르게 하면 같은 이름의 메소드를 여러개 정의할 수 있는 것처럼 생성자도 오버로딩이 가능하다.

▶ 기본 생성자 사용

public static void main(String[] args) {
    Person p1 = new Person();
    p1.setName("김신의");
    p1.setAge(27);
}

▶ 파라미터를 두개 받는 생성자 사용

public class Person {
    String name;
    int age;

    public Person(String pName, int pAge) {
        name = pName;
        age = pAge;
    }
}

public static void main(String[] args) {
    Person p1 = new Person("김신의", 27);
}

▶ 오버로딩

public static void main(String[] args) {
    Person p1 = new Person("김신의", 27);  // 첫 번째 생성자
    Person p2 = new Person("박윤석");      // 두 번째 생성자

    System.out.println(p1.name);
    System.out.println(p1.age);
    System.out.println(p2.name);
    System.out.println(p2.age);
}

this

#생성자 this()
생성자에서 다른 생성자 호출할 때 사용
다른 생성자 호출 시 첫 줄에서만 사용이 가능하다.

class Car {
	String color;
    String gearType;
    int door;
    
    Car() {
      color = "white";
      gearType = "auto";
      door = 4;
    }
    
    Car(String c, String g, int d) {
      color = c;
      gearType = g;
      door = d;
    }
}

코드의 중복 제거

class Car {
	String color;
    String gearType;
    int door;
    
    Car() {
	this("white", "auto", 4);
    }

}

#참조변수 this
인스턴스 자신을 가르키는 참조변수로, 인스턴스 메소드(생성자 포함)에서 사용이 가능. 지역변수와 인스턴스 변수를 구별할 때 사용한다!

public void setName(String name) {
    this.name = name;
}

기본형과 참조형

기본형 - 변수가 값 자체를 보관한다.
참조형 - 변수가 값 자체를 보관하는게 아니라 변수가 값을 가리킨다. 실제 값은 메모리의 어딘가에 저장되어있고 그 영역을 가리킨다. -> 객체, 배열

Person p1, p2;
p1 = new Person("이땡땡", 28);

p2 = p1;
p2.setName("김땡땡");

System.out.println(p1.getName());
System.out.println(p2.getName());

---------------------------------
김땡땡
김땡땡

null

자바에서는 '비어있음'이 null이라는 값으로 표현된다.
단, null은 참조형 변수(Reference Type)만 가질 수 있다.

Person p1 = null;
System.out.println(p1);
null

만약 null을 보관하고 있는 변수의 메소드를 호출하려고 하면 NullPointerException이라는 오류가 난다
-> 기본형 변수이기 때문

Final

쉽게 말해서 한번 정의하고나서 바꾸지 않을 값을 정의할 때 사용한다.
수를 정의할 때 final을 써주면, 그 변수는 '상수'가 되어 다시 바꿀 수 없다는 것.

인스턴스 변수와 클래스 변수

인스턴스에 해당되지 않고, 클래스에 해당되는 클래스 변수에 대해 알아보자.
클래스 변수를 정의하기 위해서는 static 이라는 키워드를 붙여주면 된다.
아래 count는 특정 인스턴스에 해당하는것이 아니라, 클래스 전체에 해당하고
클래스 이름을 이용해서 Person.count 라는 식으로 써주면 된다.
이 클래스 변수는 상수인 경우가 많다. 상수를 조금더 상수 답게 쓰기 위해
final을 같이 써주는 것이 좋다.

public class Person {
    static int count;

    public Person() {
        count++;
    }

인스턴스 메소드와 클래스 메소드

클래스 메소드는 언제 사용이 될까? 인스턴스 메소드는 인스턴스에 속한것이라서 반드시 인스턴스를 생성해야 사용할 수 있다. 하지만 클래스메소드는 클래스에 속한 것이기 때문에, 인스턴스를 생성하지 않고도 바로 실행이 가능하다. 인스턴스를 생성하지 않는 클래스는 어떤 것이 있을까

import java.lang.Math;

public class Driver {
    public static void main(String[] args) {
        System.out.println(Math.abs(-10));   // 절댓값
        System.out.println(Math.max(3, 7));  // 두 값 중 최댓값
        System.out.println(Math.random());   // 0.0과 1.0 사이의 랜덤값
    }
}

0개의 댓글