[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개의 댓글