반응형

1. this란

 - this는 자기 자신을 의미하는 키워드

 - 필드(전역변수)와 메서드or생성자의 매개변수가 동일할때 인스턴스 필드임을 명시하기 위해 사용한다.

 

2. this 특징

 - 전역변수(인스턴스 필드)와 지역변수(매개변수) 구분

class Student{
    String name; // 인스턴스 필드(전역변수)
    int age; 
    
    Student(String name, int age){
        this.name = name; // this.name는 인스턴스 필드 / name는 매개변수를 의미
        this.age = age; // this.name는 인스턴스 필드 / name는 매개변수를 의미
    }
}

 - static 메서드에서는 this를 사용하지 못한다.

 - 인스턴스 멤버(메소드, 필드)는 인스턴스를 생성해야지만 사용이 가능하다.(클래스멤버와의 차이점)

 - 매개변수와 필드의 변수명이 다른 경우 굳이 this를 쓰지 않아도 된다.

 

3. this와 this()의 차이점

class Student{
    String name; // 인스턴스 필드(전역변수)
    int age; 
    
    Student(){
        this("철수", 4); // Student(String name, int age) 생성자를 호출
    }
    
    Student(String name){
        this(name, 4); // Student(String name, int age) 생성자를 호출
    }
    
    Student(String name, int age){
        this.name = name; 
        this.age = age;
    }
}

 - this()는 같은 클래스의 다른 생성자를 호출할 때 사용하는 키워드

 - 생성자 오버로딩시에 this()를 이용한 중복코드 제거 가능

 

4. this를 사용하는 이유

 - 소스가 복잡해지고 방대해지면, 변수를 관리하기 힘들고, 필드와 매개변수를 동일하게 정의하여 this로 구분하는 것이

   직관적이고 편리하다.

'개발 > Java' 카테고리의 다른 글

String, StringBuilder, StringBuffer  (0) 2022.12.13
[Java] Garbage Collection(가비지 컬렉션)  (2) 2022.12.02
equals()  (0) 2022.11.30
[자바/JAVA] 정적 변수와 메서드 (static)  (0) 2021.06.25
[자바/JAVA] 생성자와 초기화  (0) 2021.06.23
반응형

1. 생성자란?

 - 생성자는 new 연산자를 통해 객체를 생성할 때, 제일 먼저 반드시 호출되는 일종의 메서드

 

2. 생성자의 역할

 - 생성된 인스턴스를 초기화한다. (멤버 변수 초기화)

 

3. 생성자 선언 방법

  public 클래스명(매개변수) {

            ...

  }

 - 클래스명은 필수로 입력해야 하고,  접근제어자나 매개변수는 생략 가능하다.

 

4. 생성자 특징

 - 생성자를 정의하지 않더라도, 컴파일러가 자동으로 기본 생성자(Default Constructor)를 생성해준다.

public class Student {

	String name;
	int age;
	
	// public Student() {} // Default 생성자가 자동 생성 되므로 생략 가능
	
	public static void main(String[] args) {
		Student student = new Student(); // 컴파일러가 생성한 기본 생성자를 통한 인스턴스 생성
		
		student.name = "홍길동";
		student.age = 18;
		
		System.out.println("학생 이름: " + student.name + ", 학생 나이: " + student.age);
	}
}

 

 - 생성자는 매개변수를 다르게 지정하여 여러개의 생성자를 정의하는 것이 가능하다. (생성자 오버로딩)

 

 - 기본 이외의 생성자를 정의한 경우, 기본 생성자를 사용하려면 기본 생성자도 정의해줘야 한다. (컴파일 에러남)

public class Student {

	String name;
	int age;
	
	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	public static void main(String[] args) {
		Student student = new Student("홍길동", 18); // 매개변수를 가진 생성자를 통한 Student 인스턴스 생성
		
		// Student student2 = new Student(); // 사용자가 매개변수를 가진 생성자를 정의했으므로, 기본 생성자가 자동으로 생성되지 않아 컴파일 에러가 발생

		System.out.println("학생 이름: " + student.name + ", 학생 나이: " + student.age);
	}
}

 

 - 메서드와의 차이점은 반환 값이 없는 것이다. (void나 return 자료형 생략)

 

5. 매개변수를 가진 생성자를 활용한 예시

- 주문매체(orderMedia)에 따른 멤버 변수 초기화

@Getter
@ToString
public class Media {

	String orderMedia;
	String mediaCode;
	String mediaGb;
	String insertId;
	String receiveMethod;
	String membGb;
	String custNo;
	
	public Media(OrderMedia media, String membGb, String custNo) {
		switch (media) {
		case MC:
			this.orderMedia = OrderMedia.MC.toString();
			this.mediaCode = MediaCode.MC.toString();
			this.mediaGb = MediaGb.MC.toString();
			this.insertId = InsertId.MC.toString();
			this.receiveMethod = ReceiveMethod.MC.toString();
			break;
		default:
			this.orderMedia = OrderMedia.PC.toString();
			this.mediaCode = MediaCode.PC.toString();
			this.mediaGb = MediaGb.PC.toString();
			this.insertId = InsertId.PC.toString();
			this.receiveMethod = ReceiveMethod.PC.toString();
			break;
		}
		
		this.membGb = membGb;
		this.custNo = custNo;
	}
}

- 기본 생성자 사용시, 객체 생성시마다 아래의 분기문을 처리해줘야 하지만 매개변수를 가진 생성자를 통해 생성과 함께 초기화가 가능하다.

 

 

참고)

https://velog.io/@lshjh4848/%ED%81%B4%EB%9E%98%EC%8A%A4%EC%99%80-%EC%83%9D%EC%84%B1%EC%9E%90

 

클래스와 생성자

객체지향의 기본이라고 할 수 있는 클래스와 생성자에 대한 기본개념입니다.

velog.io

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=heartflow89&logNo=220955879645 

 

[JAVA/자바] 생성자(Constructor)와 초기화

이전 포스팅에서 인스턴스를 생성할 때 "클래스 객체변수 = new 클래스();" 라는 구문을 사용하고 이때 "클...

blog.naver.com

 

'개발 > Java' 카테고리의 다른 글

String, StringBuilder, StringBuffer  (0) 2022.12.13
[Java] Garbage Collection(가비지 컬렉션)  (2) 2022.12.02
equals()  (0) 2022.11.30
[자바/JAVA] 정적 변수와 메서드 (static)  (0) 2021.06.25
[자바/JAVA] this  (0) 2021.06.24

+ Recent posts