Java 13(this, 생성자)

Kang.__.Mingu·2024년 5월 2일
0

Java

목록 보기
15/108

this

  • 메소드에서 메소드를 호출한 객체의 메모리 주소를 저장하기 위한 키워드
  • 메소드에서 this 키워드로 객체를 참조하여 객체의 필드 또는 메소드 사용
  • this 키워드를 사용하지 않아도 객체의 필드 또는 메소드 사용 가능하도록 자동 제공

메소드에 this 키워드가 존재하는 이유

  • 래스에 작성된 필드는 객체마다 메모리(HeapArea)에 독립적으로 생성되지만 메소드는 객체와 상관없이 메모리(MethodArea)에 하나만 생성되어 사용 - 프로토타입 클래스(Prototype Class)
  • 메소드에서 필드를 사용할 경우 객체를 명확히 구분하여 객체 필드를 사용하기 위한 this 키워드 제공

this 키워드를 사용하는 경우

1.메소드의 매개변수의 이름을 필드의 이름과 동일하게 작성한 경우 필드를 표현하기 위해 this 키워드 사용

  • 생성자 또는 Setter 메소드를 작성할 경우 사용

2.생성자에서 다른 생성자를 호출하여 필드 초기화 처리하기 위해 this 키워드 사용
3.이벤트 처리 프로그램 또는 다중 스레드 프로그램에서 객체를 표현하기 위해 this 키워드 사용


생성자(Constructor)

  • 객체를 생성하기 위한 특별한 메소드
  • 생성자를 작성하지 않으면 매개변수가 없는 기본 생성자를 자동으로 생성하여 제공
  • 생성자를 작성하면 매개변수가 없는 기본 생성자 미제공
  • 필드에 원하는 초기값이 저장된 객체를 생성하기 위해 생성자 작성
  • 형식) 접근제한자 클래스명(자료형 변수명, 자료형 변수명, ...){명령; 명령;...}
  • 반환형을 작성하지 않으며 생성자의 이름은 반드시 클래스 이름과 동일하게 작성
  • 일반적으로 생성자에서는 매개변수로 전달받은 값으로 필드의 초기값으로 저장하는 명령 작성

매개변수가 없는 생성자 - 기본 생성자(Default Constructor)

  • 필드에 대한 초기화 작업 미구현 - 필드에는 기본값이 초기값으로 저장
  • 기본 생성자를 작성하지 않으면 클래스 상속시 문제가 발생될 수 있으므로 기본 생성자를 작성하는 것을 권장

Member 클래스

public class Member {
	//필드(Field) : 표현대상의 속성값을 저장하기 위한 클래스의 요소
	// => 필드 작성시 필드에 저장된 초기값 설정 가능 : 객체 생성시 기본값이 아닌 초기값 저장
	private String id="NoId";
	private String name="NoName";
	private String email="NoEmail";
	
    // 매개변수가 없는 생성자 - 기본 생성자
	public Member() {
		//this 키워드를 사용하여 매개변수가 있는 생성자를 호출하여 필드 초기화 처리
		//형식) this(값, 값, ...)
		// => 생성자에 this 키워드로 다른 생성자를 호출하는 명령
		// => this 키워드로 생성자를 호출하는 명령은 무조건 생성자의 첫번째 명령으로 작성
		//this("NoId", "NoName", "NoEmail");
	}
	
	//매개변수가 있는 생성자 작성
	// => 매개변수에 전달되어 저장된 값을 필드의 초기값으로 저장
	public Member(String id) {
		this.id=id;
	}
	
	public Member(String id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	public Member(String id, String name, String email) {
		super();
		this.id = id;
		this.name = name;
		this.email = email;
	}

	//메소드(Method) : 명령을 실행하여 표현대상의 행위(기능)을 구현하기 위한 클래스의 요소
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public String getEmail() {
		return email;
	}
	
	public void setEmail(String email) {
		this.email = email;
	}
	
	public void display() {
		System.out.println("아이디 = "+id);
		System.out.println("이름 = "+name);
		System.out.println("이메일 = "+email);
	}
}

MemberApp 클래스

package oop;

public class MemberApp {
	public static void main(String[] args) {
		//new 연산자로 Member 클래스의 매개변수가 없는 기본 생성자를 호출하여 객체 생성해 
		//참조변수에 저장
		// => 생성된 객체 필드에는 기본값이 초기값으로 자동 저장
		Member member1=new Member();
		
		//객체로 필드의 Getter 메소드를 호출하여 객체의 필드값을 반환받아 출력
        //Member 클래스에서 필드의 초기값이 출력됨
		System.out.println("아이디 = "+member1.getId());
		System.out.println("이름 = "+member1.getName());
		System.out.println("이메일 = "+member1.getEmail());
		System.out.println("==============================================================");
		//객체로 필드의 Setter 메소드를 호출하여 매개변수에 전달된 값으로 객체의 필드값 변경
		member1.setId("abc123");
		member1.setName("홍길동");
		member1.setEmail("abc@itwill.xyz");

		/*
		System.out.println("아이디 = "+member1.getId());
		System.out.println("이름 = "+member1.getName());
		System.out.println("이메일 = "+member1.getEmail());
		*/
        
        //위의 작업을 Member 클래스에서 display() 메소드 명령으로 작성하여 손쉽게 출력
		member1.display();
		System.out.println("==============================================================");
		//new 연산자로 매개변수가 있는 생성자를 호출하여 객체를 생성해 참조변수에 저장
		// => 매개변수에 전달된 값에 의해 객체 필드에 초기값으로 저장
		// => 매개변수에 전달되는 값에 의해 생성자가 자동 선택되어 호출 - 메소드 오버로딩에 의한 다형성
		Member member2=new Member("opq456");
		member2.display();
		System.out.println("==============================================================");
		Member member3=new Member("xyz789", "임꺽정");
		member3.display();
		System.out.println("==============================================================");
		Member member4=new Member("asd123", "전우치", "asd@itwill.xyz");
		member4.display();
		System.out.println("==============================================================");
	}
}
profile
최선을 다해 꾸준히 노력하는 개발자 망고입니당 :D

0개의 댓글