[신세계I&C KDT][Java 프로그래밍] #7 생성자 constructor (0315, 0318)

박현아·2024년 3월 15일
0

신세계아이앤씨 KDT

목록 보기
7/42

1. 지정자 (modifier)

1) 접근지정자 (access modifier)

  • public : 제한이 없음
  • protected
  • (default)
  • private : 외부 클래스에서는 접근이 X, 자신만 접근 가능
  • 클래스, 메서드, 로컬변수 제외한 인스턴스 변수 및 스태틱 변수, 생성자에 사용 가능

2) 일반지정자 (standard modifier)

  • static
  • final
  • abstract

2. 생성자 (constructor)

1) 역할

: heap 메모리에 생성된 인스턴스 내의 인스턴스 변수를 초기화하는 역할

2) 특징

  • 인스턴스를 직접 접근할수도 있으나 권장 X (잘못된 데이터를 필터링 없이 저장 가능하기 때문)
public 클래스명 ([변수, 변수, ...]) {
	// 파라미터는 쓸 수도 안 쓸 수도.
}
  • 생성자가 실행이 되려면 반드시 호출해야 된다 ( new Cat() )
  • 생성자는 명시적으로 지정할 수도 있고 자동으로 지정될 수도 있다
public 클래스명() {
 
 } // 기본생성자, default 생성자 : 파라미터가 없는 생성자
  • 하나의 클래스에 생성자를 여러 개 만들 수 있다 : 오버로딩(overloading) 생성자
    (식별을 위해 생성자의 파라미터는 달라야 됨. argument list (인자 리스트)는 갯수, 타입, 순서 달라야 함)

3) 생성자 이용 초기화의 장점

  • 생성자 안에서 유효성 체크가 가능하다
  • 직접 접근보다 빠르게 초기화가 가능하다

3. this 키워드

1) 개념

: heap 메모리에 올라간 자신의 인스턴스의 주소를 참조한다

2) 반드시 this를 지정해야되는 경우

  • 인스턴스 변수명과 메서드 및 생성자의 파라미터 변수명이 동일한 경우 : this.변수;, this.메서드;
	public class Cat {
		String name; // 인스턴스 변수
    
   	 	public Cat( String name ) { // 로컬 변수 (파라미터)
    	this.name = name;
    	}
	}
  • 생성자에서 다른 생성자를 호출할 때 : this([값1, 값2,...];
    - ex) this(); -> Cat() 호출
    - this("야옹이", 2) -> Cat(String name, int age) 호출
	public Cat(String name, int age, String gender) { // 로컬 변수
		this.name =name;
		this.age = age;
		this.gender = gender; // heap의 gender에 stack의 gender 값을 넣는다
	}
	
	public Cat(String name, int age) {
		this(name, age, "암컷"); // 위의 파라미터 3개인 생성자 호출
	}

4. 메서드 (method)

1) 클래스 구성요소 역할

public class 클래스명 {

//인스턴스 변수 : 객체의 속성을 저장하는 용도 (this.변수 가능)(직접 접근 방지 위해 private으로 지정한다)

private int age;

//생성자 : 인스턴스 변수의 초기화 (오버로딩 가능)(this(값,...)이용해서 다른 생성자 호출 가능)

public Cat(int age) {
    this.age = age;
      }

//메서드 : 다양한 기능 처리 용도

}

2) 메서드 문법

  • 메서드
public 리턴타입 메서드명([변수,변수,...]) {
	문장1;
    문장2;
    [return;]

}
  • 생성자
public 클래스명([변수,변수,...]) {
	문장1;
}

- 생성자와 차이점

- 리턴타입을 반드시 지정해야 됨

- 리턴값을 가질 수 있다
- 메서드명은 임의로 지정 가능 (생성자는 반드시 클래스명)

- 생성자와 공통점

- 반드시 호출해야 한다
	- 생성자 호출 : new 클래스명(); , this()
    - 메서드 호출 : 객체 생성 후 (new) 호출 가능
 		Cat c = new Cat();
        c.메서드();

- 메서드 호출 방법

  • 다른 클래스에서
step 1
클래스명 참조변수명 = new 클래스명([,...]);
step 2
참조변수명.메서드([,...]);
  • 자신 클래스에서
step 1
클래스명 참조변수명 = new 클래스명([,...]);
step 2
this.메서드([,...]);
또는
메서드([,...]);

- 메서드 특징

  • 메서드명은 사용자 정의 식별자이기 때문에 임의로 지정 가능 (동사형, 소문자)
  • 반드시 호출해야 된다
  • 호출 후 수행이 끝나면 호출한 곳으로 돌아간다

3) 메서드 형태

(1) 파라미터 X, 리턴값 X (void)

public class Util {
	public void method1() {
		System.out.println("method1");
	}
}

 // 사용 방법
Util u = new Util();
u.method1();

(2) 파라미터 O, 리턴값 X (void)

public class Util {
	public void method2(int n) {
		System.out.println("method2" + n);
	}
    public void method3(int n, int n2) {
		System.out.println("method2" + n + " " + n2);
	}
}

 // 사용 방법
Util u = new Util();
u.method2(10);
u.method3(10,20);

오버로딩 메서드 (overloading method)

  • 하나의 클래스 안에 동일한 이름의 메서드가 여러 개 지정이 가능하다
    단, 인자 리스트 (갯수, 타입, 순서)는 반드시 달라야 된다
  • 장점 : 재사용

(3) 파라미터 X, 리턴값 O

public class Util {
	public int method1() {
    	return 100;
    }
}

// 사용 방법
Util u = new Util();
int n = u.method1(); n에 method1()의 리턴값 넣어주기

(4) 파라미터 O, 리턴값 O

public class Util {
	public int sum(int n, int m) {
    	return n + m;
    }
}

// 사용 방법
Util u = new Util();
int result = u.sum(10, 20); 

(5) 메서드 호출 시 파라미터에 전달하는 값(인자값, argument)이 기본형 vs 참조형

(1) call by value
메서드 호출시 파라미터에 인자값으로 기본형 데이터를 전달 할 수 있다. 이 때, 전달받은 메서드에서 값을 수정할 수 있다. 원본값은 수정이 안 됨

(2) call by value reference
메서드 호출시 파라미터에 인자값으로 참조형 데이터 (클래스, 배열) 전달 할 수 있다. 이 때, 전달받은 메서드에서 값을 수정할 수 있음. 원본이 변경됨. 이유는 전달되는 인자값이 주소값이기 때문이다.

0개의 댓글