[java] 메소드와 생성자

심심이·2024년 1월 17일
0

java

목록 보기
4/46

메소드

behavior == 행위 == 기능 == method(메소드)
자바에서 소괄호 () 가 나오는 것은 오로지 딱 2개 밖에 없다. 첫번째는 생성자(constructor)에서 소괄호 ()가 사용되고,
두번째는 method(메소드)에서 소괄호 ()가 사용된다.

public class Member {
	String id;
	String pwd; 
	String name; 
	String email; 
    
    	//회원의 정보를 출력해주는 기능을 만들기
	void print_info() { // 인스턴스 메소드
		//void == 리턴값이 없다.
		System.out.println("===회원정보===\n" + "1.아이디: " + id + "\n" + "2.비밀번호:" + 
		"3.성명: " + name + "\n" + "4.이메일:" + email + "\n" + address + "\n");
		// 문자열 사이의 + 는 문자열 결합을 뜻한다.
	}
}

static 메소드>

static void print_info() {
  //클래스로 접근해서 바로 사용함 (별도 객체화 no)
}

메소드 사용

public class Member_main {
		System.out.println(">> lssMbr 이라는 인스턴스(객체)에 저장된 필드 값 출력");
		lssMbr.print_info();
		
		System.out.println(">> eom_mbr 이라는 인스턴스(객체)에 저장된 필드 값 출력");
		eom_mbr.print_info();
}

print_info() 메소드에서 필드값을 출력한다. -> 이런 경우는 생성자로 짜는 것이 좋을 것 같다.


생성자

생성자는 인스턴스화 할때(인스턴스를 생성하자마자) 바로 호출이 된다.
<생성자 규칙>
1. 이름 == 클래스 이름(첫글자 대문자)
2. 반환 타입이 없다.
3. 매개변수가 있는 생성자가 없을 시 기본 생성자가 자동으로 생성된다(생략되어서 보이지 않을 뿐 존재함)
4. 매개변수 있는 생성자를 생성했을 시 기본 생성자를 개발자가 별도로 만들어줘야 한다.(꼭)
5.생성자는 반드시 호출되어야 한다.
6.생성자 오버로딩이 가능하다.

  • 생성자는 객체 생성 직후 객체를 초기화하기 위한(값을 주기 위한) 특별한 메서드로 생각할 수 있다.

<생성자는 2개로 나뉘어진다.>
1. 기본 생성자: 매개변수가 없는 생성자. 생성자가 1개라도 있으면 기본 생성자가 자동 생성되나, 하나라도 있으면 자바는 생성하지 않는다.(개발자가 반드시 생성해야 함)
2. 파라미터가 있는 생성자:

!!!! 중요암기 !!!!
클래스를 생성할 때 생성자를 표기한 것이 없는 경우라면 Member(){} 기본생성자가 생략되어 있는 것이다. 그런데 파라미터(==매개변수)가 있는 생성자를 선언해 버리면 기본 생성자는 자동적으로 삭제된다. => 기본 생성자를 개발자가 만들어줘야 함. (인스턴스화해서 new할때 기본생성자 없어서 오류가 나게 되는 이유가 이것: Member member = new Member();<-이 괄호가 기본생성자이다.)

package my.day02.b.constructor;

public class Member {

	// field, attribute, property, 속성
	String userid;
	String passwd;
	String name;
	String email;
	int age;
	int point;
	
	Member() {
    //기본 생성자
    }
	
	
	
	
	Member(String userid, String passwd, String name, int age, int point) {
		/*
		 지역변수(매개변수 포함)명과 멤버변수명(instance변수,static변수 모두 가리킴)이 일치할 경우에는
		 지역변수가 더 우선된다.
		 */
		this.userid = userid;
		this.passwd = passwd;
		this.name = name;
		this.age = age;
		this.point = point;
	}
	
	
	// behavior, 행위, 기능, method 
	void info_print() {
		System.out.println("===" + name + "님의 회원정보 ===\n"
				+"1. 아이디: " + userid + "\n"
				+"2. 비밀번호: " + passwd + "\n"
				+"3. 성명: " + name + "\n"
				+"4. 나이: " + age + "\n"
				+"5. 포인트: " + point + "\n"
				+"6. 이메일: " + email + "\n");
	}
	
}

main클래스>>


public class Main_Member {

	public static void main(String[] args) {
		Member hongkd_mbr = new Member();
		hongkd_mbr.userid = "hongkd";
		hongkd_mbr.passwd = "qwer1234";
		hongkd_mbr.name = "홍길동";
		hongkd_mbr.age = 30;
		hongkd_mbr.point = 100;
		
		hongkd_mbr.info_print();
		
		Member eomjh_mbr = new Member("eomjh", "qwer1234", "엄정화", 27, 200);
        //매개변수 생성자 호출후 매개변수를 필드에 밀어넣음(초기화해줌)
		eomjh_mbr.info_print();
	}

}

this()를 통해 생성자 내부에서 자신의 생성자를 호출 가능하다.(이거 쓴다고 생성이 2번 되는 거 아님)
-> this(name,age,50); //생성자 코드의 첫줄에서만 사용 가능함, 리터럴 넣기도 가능함.

(*()는 2가지 사용: 메서드, 생성자 호출)

	
	Member(String userid, String passwd, String name, int age, int point) {
		this.userid = userid;
		this.passwd = passwd;
		this.name = name;
		this.age = age;
		this.point = point;
	}
	
	Member(String userid, String passwd, String name,String email,int age, int point) {
		this.userid = userid;
		this.passwd = passwd;
		this.name = name;
		this.email = email;
		this.age = age;
		this.point = point;
	}
	

-> this() 생성자를 통해서 코드를 리팩토링할 수 있다.

	Member(String userid, String passwd, String name, int age, int point) {
		this.userid = userid;
		this.passwd = passwd;
		this.name = name;
		this.age = age;
		this.point = point;
	}
	
	Member(String userid, String passwd, String name,String email,int age, int point) {
		this(userid,passwd,name,age,point);
		this.email = email;
	}
	

내가 헷갈렸던 부분!
생성자 호출은 반드시 생성자 내에서만 가능하다.
생성자로 사용되는 this() 또는 this(파라미터, 파라미터,...)는 오로지 생성자 내부에서만 호출 가능하므로 메서드 내부에서는 사용이 불가능하다.

profile
개발하는 심심이

0개의 댓글

관련 채용 정보