JAVA _기초

[JAVA] Method & Constructor 비교

Journey Jeong 2023. 2. 14. 20:34

 

 

1. Method 

- 자바에서 특정 작업을 수행하기 위한 명령문

- 다른 언어에서는 "함수" 와 같은 것 

 

* Method 사용 목적

- 중복되는 코드 반복을 줄여줌 => 재사용성에 용이

- 모듈화를 통해 코드의 가독성이 좋아짐 

- 유지보수에 용이하다. 

 

2. Constructor (생성자) 

: 생성자는 개체가 생성될 때 개체를 초기화하며, 클래스와 이름이 같고 문법적으로 메소드와 유사함
- 그러나 생성자에는 return  없다!! (즉 리턴 타입을 지정할 수 없다)

- 일반적으로 생성자를 사용하여 클래스에서 정의한 인스턴스 변수에 초기 값을 제공하거나 완전히 구성된 개체를 만드는 데 필요한 다른 시작 절차를 수행

- Java는 모든 멤버 변수를 0으로 초기화하는 기본 생성자를 자동으로 제공

- 생성자의 이름은 반드시 클래스 이름과 동일하게 작성해야 한다.

- 생성자는 new 를 통해 객체를 생성할 때 한번만 호출 

- 생성자는 여러개 작성(오버로딩) 할 수 있다

* 오버로딩의 정의는 자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의할 수 있다. <-> 오버라이딩은 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의하는 것을 오버라이딩이라고 한다. 상속받은 메소드를 그대로 사용할 수도 있지만, 자식 클래스에서 상황에 맞게 변경해야하는 경우 오버라이딩할 필요가 생긴다.

 

- 선언 방법

클래스 이름(){...} // 매개변수가 없는 생성자 선언
클래스 이름(인수1, 인수2, ...){...} //매개변수가 있는 생성자 선언

 

 

*예시

Public class MyClass {
   Int num;
   MyClass() {
      num = 100;
   }
}
// A simple constructor.
class MyClass {
   int x;
   
   // Following is the constructor
   MyClass(int i ) {
      x = i;
   }
}

- 생성자를 호출함으로 초기화 

public class ConsDemo {
   public static void main(String args[]) {
      MyClass t1 = new MyClass( 10 );
      MyClass t2 = new MyClass( 20 );
      System.out.println(t1.x + " " + t2.x);
   }
}

 

* 예시 (생성자) 

package method;

public class Member {
	
	private String id;
	private String name;
	private int age;

	
	//생성자가 여러개 존재 가능합니다.
	//이름이 같을수 밖에 없어요 // 이름이 똑같을 수 없다  //매개변수로 구분 할 수 있음 (변수 이름은 의미 없음)
	// 생성자 Overloading: 한 메소드에서 파생되어 이름은 같지만 매개변수의 개수 또는 유형이 다르게 구분짓는 것 
	
	public Member() { //제일 많이 사용 
	}
	
	//생성자 
	public Member(String id) { //id 만 초기화, 나머지는 디폴트 초기화 
		this.id=id; //this 생성자 
	}
	public Member(String id, String name) { //동일한 매게변수 2개로 가능 
		this(id); // 생성자 내부에서만 사용이 가능함  //위에서 초기화 해주었기에 // 두번째 라인엔 올 수 없음 
		//this(id)는 생성자 내부 첫 줄에마서만 호출 가능함. 
		this.name=name;
	}
	public Member(int age, String id, String name) {  // 각 다른 매개 변수와 함께 가능 -> 오버로딩 
		this(id, name); 
		this.age=age;
	} // 제일 많이 사용 2
	
	
	
	// Method overloading: 
	//get필드명(): getter
	public String getId() {
		return id;
	}
	public String getName() {
		return name;
	}
	public int getAge() {
		return age;
	}
		
	
	//set필드명(): setter 
	//우회하여 객체 정보 갖고 오기 
	public void setId(String id) {
		this.id=id;
	}
	public void setName(String name) {
		this.name=name;
	}
	public void setAge(int age) {
		this.age=age;
	}
	

}

 

 

* 예시(Method 호출)

package method;

public class MethodTest06 {

	public static void main(String[] args) {
	
		Member m=new Member();
		m.setId("greed1");
		m.setName("노그린");
		m.setAge(3);
		
		String id=m.getId();
		System.out.println("id= "+id);
		
		String name=m.getName();
		System.out.println("name= "+name);
		
		int age=m.getAge();
		System.out.println("age= "+age);
		
	}

}

 

* 예시 (메소드 오버로딩)

package overload;

public class Calc {
	//메소드 오버로딩 
	
	public int plus(int num1, int num2) { //정수형
		return num1 + num2;	
	}
	public long plus(long num1, long num2) { //실수형
		return num1 + num2;	
	}	
	public int plus(short num1, short num2) { //실수형
		return num1 + num2;	
	}
	public double plus(double num1, double num2) { //실수형
		return num1 + num2;	
	}
	
	
	public static void println(String msg) {
		System.out.println(msg);
	}
	public static void println(int num) {
		System.out.println(num);
	}
	public static void println(double num) {
		System.out.println(num);
	}
	
////////////////////////////////////////////////////////////////////////////////	
	
	public static void main(String[] args) {
	
		Calc cal=new Calc();
		System.out.println("정수 + 정수 : "+ cal.plus(10, 20)); //30 
		System.out.println("실수 + 실수 : "+ cal.plus(2.5, 3.2)); //5.7 
		System.out.println();
		
		Calc.println("안녕하세요.");
		cal.println("반갑습니다.");
		
	}
	
}//c