티스토리 뷰

 

 

 

 

 

 

 

 

 

 

📍   기본 생성자

–   클래스를 사용하여 인스턴스를 생성할 때 호출되는 메서드의 형태.
      →   new 키워드 뒤에 생성자 호출 코드가 기술됨.   ex ) Animal ani = new Animal();
–   인스턴스 변수를 초기화하는 용도 또는 인스턴스 생성 시 초기에 수행할 작업을 기술하는 용도.

–   접근제한자가 클래스와 같으며,  매개변수가 없고,  주괄호 블록{ }내에 수행할 코드가 없음.
–   메서드와 형태가 유사하나 차이점 두 가지 존재함.
     1 )   선언부에 리턴타입이 없음.
            →   리턴타입이 없다기 보다 정확하게는 리턴타입 자체를 기술하지 않음,  아예 존재하지 않음.)  
     2 )   생성자 이름이 클래스 이름과 동일.
–   개발자가 클래스 정의 시 생성자를 하나도 정의하지 않으면,  컴파일러에 의해 자동으로 기본(Default) 생성자가 생성됨.
–   생성자를 별도로 호출할 수 없으며,  반드시 new 키워드 뒤에만 지정 가능.

 

 

 

 

 

▸   생성자 정의


[접근제한자] 클래스명 ( [매개변수 선언..] ) {
                     생성자 호출 시점(인스턴스 생성 시점)에 수행할 작업 기술
                      →   인스턴스 변수 초기화 등
}

EX1   )

 

•   기본 생성자 (Default Constructor)

class Person{

	// 멤버변수
	String name;
	int age;
	
	// 기본 생성자
	// public Person() {}		
	
}

–   main클래스 밑에 Person 클래스를 생성함.

–   클래스 정의 시 개발자가 별도의 생성자를 하나도 정의하지 않을 경우,

     자바 컴파일러에 의해 기본 생성자가 자동으로 생성됨.
     →   기본 생성자는 접근제한자가 클래스와 같고,  리턴타입이 없으며,  이름은 클래스이름과 같음.
            또한,  매개변수가 없으며 주괄호 블록{ }내에 수행할 코드가 없음.

 

 

•   기본 생성자에 수행할 작업 추가

class Person{

	// 멤버변수
	String name;
	int age;
	
	public Person() {
		System.out.println("생성자 person() 호출");
		name = "홍길동";
		age = 20;
	}	
}

–   생성자의 기본 역할은,  주로 인스턴스 변수 초기화.
     →   객체(인스턴스) 생성 시 기본적으로 가져야하는 값을 설정하는 역할.
     →   기본 생성자 내에서 멤버변수에 특정 값을 지정하여, 객체 생성 시 해당 데이터를 가진 채로 사용 가능하도록 함.
            즉,  객체가 기본적으로 가져야할 공통적인 값을 설정.
–   인스턴스 변수 name에 "홍길동",  age에 20의 데이터를 저장해둠.

 

 

•   main 메서드에서 실행

// 인스턴스 생성
Person p = new Person();

System.out.println("이름 : " + p.name);
System.out.println("나이 : " + p.age);

–   new 키워드에 의해 인스턴스가 생성될 때,  Person() 형태의 생성자를 자동으로 호출하게 됨.

–   생성자를 정의할 때,  변수 name과 age에 미리 값을 세팅해두었으므로 해당 값이 출력됨.
–   주의!   p.Person(); 메서드 형태니까 생성자를 별도로 호출할 수 있느냐? 할 수 없음!

   실행 결과

더보기

이름 : 홍길동
나이 : 20

 

// 새로운 인스턴스 생성
Person p2 = new Person();
p2.name = "이순신";
p2.age = 44;

System.out.println("이름 : " + p2.name);
System.out.println("나이 : " + p2.age);

–   새로운 인스턴스를 만들어 새로운 값을 넣어줬으므로 새로운 값이 출력됨.

   실행 결과

더보기

이름 : 이순신
나이 : 44

 

 

 

EX2   )   은행계좌(Account) 만들기

class Account {
	
    	// 멤버변수
	String accountNo;
	String ownerName;
	int balance;
	
    	// 기본 생성자 생성
	public Account(){
		
        	// 멤버변수에 데이터 저장
		accountNo = "111-1111-111";
		ownerName = "홍길동";
		balance = 0;
		
		// 메서드 호출
		showAccountInfo();
	}
	

	// 메서드 정의
	public void showAccountInfo() {
		System.out.println("계좌번호 : " + accountNo);
		System.out.println("예금주명 : " + ownerName);
		System.out.println("현재잔고 : " + balance);
	}
}

–   main클래스 밑에 Account 클래스 생성함.

–   기본 생성자에 인스턴스 생성 시 기본값으로 가져야 할 데이터를 멤버변수에 저장함.

–   인스턴스 생성 시 초기화 후 바로 계좌정보를 출력하고 싶으므로 해당 메서드를 호출함.

      →   해당 메서드는 클래스의 멤버이므로 바로 밑에 정의해둠.

 

Account acc = new Account();

–   기본 생성자안에 인스턴스 생성 시 기본값으로 가져야 할 멤버변수 데이터와 메서드 호출을 담아놨으므로

     인스턴스만 생성해서 프로그램을 실행해도 멤버변수 데이터와 메서드가 작동함. 

   실행 결과

더보기

계좌번호 : 111-1111-111
예금주명 : 홍길동
현재잔고 : 0

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

📍   파라미터 생성자

–   생성자 호출 시점에서 전달해야 할 데이터가 있을 경우파라미터(매개변수)를 선언할 수 있음. (= 메서드와 동일)
–   전달받은 데이터는 인스턴스 변수를 초기화하는 용도로 사용.
–   즉,  객체마다 다른 데이터를 가진 채로 인스턴스를 생성하기 위한 용도.

–   파라미터 생성자 자동 생성 단축키   :  Alt + Shift + s → o
      →   단,  멤버변수가 하나도 없을 경우 자동 생성창 실행되지 않음.

 

 

 

 

 

▸   파라미터 생성자 정의


[접근제한자] 클래스명 (매개변수 선언...) {
                    인스턴스변수명 = 데이터;
}

–   생성자 호출 시점에 파라미터에 데이터를 전달하여,  인스턴스 내의 인스턴스 변수를 초기화 함.


EX   )

 

•   클래스 생성하기

class Person{
	
	String nation;
	String name;
	int age;
	
	// 파라미터 생성자 정의
	public Person(String newName, int newAge) {	
		// 전달받은 파라미터 값을 인스턴스 변수에 저장
		name = newName;
		age = newAge;
		nation = "대한민국";
	}
	
	// 메서드 정의
	public void showPerosnInfo() {
		System.out.println("이름 : " + name);
		System.out.println("나이 : " + age);
		System.out.println("국가 : " + nation);
	}				
}

–   main 클래스 밑에 Person 클래스 생성 후,  멤버변수 정의 & 생성자 정의 & 메서드 정의함.

–   국가명(nation)은 무조건 "대한민국"으로 고정하고 싶으므로,
     별도로 파라미터값을 전달받지 않고 생성자 내에서 "대한민국"으로 초기화함.

 

 

•   인스턴스 생성하기

Person p = new Person("홍길동", 20);
p.showPerosnInfo();
		
Person p2 = new Person("이순신", 44);
p2.showPerosnInfo();

–   인스턴스 생성과 동시에 생성자의 파라미터로 데이터를 전달 받고,  메서드의 호출로 인해 해당 데이터를 출력함.

–   파라미터 생성자를 정의할 때,  name과 age만 전달받고 nation은 "대한민국"으로 미리 초기화해둠.

   실행 결과

더보기

이름 : 홍길동
나이 : 20
국가 : 대한민국
-------------
이름 : 이순신
나이 : 44
국가 : 대한민국

 

 

⚠️주의⚠️

Person p3 = new Person();

–   에러 발생!  The constructor Person() is undefined
–   파라미터 생성자를 하나라도 정의할 경우,  컴파일러에 의해 기본 생성자가 자동으로 생성되지 않음.
     →   기본 생성자를 호출할 수 없게 됨.
–   이미 여러 기능으로 정의한 생성자는 꼭 정의된 대로 사용해야하는 '강제성'이 있음. 
     그래서 나중에 다른 기능으로 변수나 메서드를 추가하고 싶을 때는 기본 생성자가 필요함.
     →   해결책 : 기본 생성자를 따로 정의하기

 

 

 

 

 

 

 

 

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함