티스토리 뷰

JAVA

[Java] 메소드(methond)와 생성자(constructor)

단미라이프 2022. 3. 23. 23:28
반응형

 

 

1. 메소드의 개념

  • 자바에서 특정 작업을 수행하기 위한 명령문의 집합을 메소드라고 부른다.
  • 다른 프로그래밍 언어에는 함수와 같은 것을 메소드라고 볼 수 있다.

 

메소드 사용 목적

 

  • 중복되는 코드의 반복을 피할 수 있기 때문이다.
  • 모듈화를 통해 코드의 가독성이 좋아진다.
  • 기능 변경이 필요할때 유지보수를 쉽게 할 수 있다.

 

 

메소드 정의

 

접근제어자 반환타입 메소드이름(입력자료형1 매개변수1, 입력자료형2 매개변수2, ...) { // 선언부

    // 구현부
    return 리턴값;    
}
  • 접근제어자는 해당 메소드에 접근할 수 있는 범위를 나타냅니다.
  • 반환타입(return type)은 메소드가 모든 작업을 마치고 반환하는 데이터의 타입을 나타냅니다.
    리턴값이 없으면 void로 표기한다.
  • 메소드이름은 메소드 호출을 위함 이름입니다.
  • 매개변수목록(parameters)은 메소드 호출 시 전달되는 자료형과 매개변수를 나타냅니다.
  • 구현부에는 메소드 고유 기능을 수행하는 명령문을 표현합니다.
    리턴값이 없는 메소드도 존재한다.

 

 

메소드 호출

 

1. 객체참조변수이름.메소드이름();	// 매개변수가 없는 메소드의 호출
2. 객체참조변수이름.메소드이름(인수1, 인수2, ...);	// 매개변수가 있는 메소드의 호출

 

메소드 예제

 

public class Ex01 {
    int sum(int a, int b) {  // a, b 는 매개변수
        return a+b;
    }

    public static void main(String[] args) {
        Ex01 ex01 = new Ex01();
        int num = ex01.sum(2, 5);	// 2, 5는 인수

        System.out.println(num);	// 7 출력
    }
}

 

 

2. 생성자(Constructor)

  • 생성자는 객체가 생성될 때 객체의 초기화를 위해 실행되는 메소드이다.

 

생성자의 선언

 

자바에서 클래스 생성자를 선언하는 방법은 다음과 같습니다.

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

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

 

 

생성자의 특징

 

  • 생성자의 이름은 반드시 클래스 이름과 동일하게 작성해야 한다.
public class Circle{
	public Circle(){....}	// 생성자
}
  • 생성자는 여러개 작성(오버로딩)할 수 있다.
public class Circle{
	public Circle(){....}	// 매개변수 없는 생성자
	public Circle(int a, String b){....}	//2개의 매개변수를 가진 생성자	
}
  • 생성자는 new를 통해 객체를 생성할 때 한번만 호출된다.
Circle pizza = new Circle(10, "피자");	// 생성자 Circle(int a, String b) 호출
Circle donut = new Circle();	// 생성자 Circle() 호출
  • 생성자는 어떤 값도 리턴하지 않기 때문에 리턴 타입을 지정할 수 없다.
public void Circle(){....}	// 오류

 

 

기본 생성자(default constructor)

 

클래스이름(){}
  • 기본생성자는 매개변수와 실행코드가 없어 아무일도 하지 않고 단순 리턴하는 생성자이다.
    • 디폴트 생성자라고도 부른다
    • 객체가 생성 될 때 컴파일러는 사용자의 눈에 보이지 않게 기본 생성자를 자동으로 생성한다.
    • 클래스에 생성자가 하나라도 존재하는 클래스에는 컴파일러가 기본 생성자를 삽입해주지 않는다.

 

 

생성자 예제

 

public class Circle {

	int radius;
	void set(int r){
		radius = r;
	}
	double getArea(){
		return 3.14*radius*radius;
	}

	public static void main(String [] args){

		Circle pizza = new Circle();
		pizza.set(3);
	
	}

}

 

 

 

3. this와 this()

 

this

 

  • 자바에서 this는 객체 자신을 가리키는 레퍼런스이다.
  • 즉, 현재 실행되고 있는 메소드가 속한 객체에 대한 레퍼런스이다.
public class Circle{
	int radius;
    public Circle(int radius){
    	this.radius = radius;
    }
    public int getRadus(){
    	return radius;
    }
}

 

this의 필요성

 

  • 매개변수의 이름을 멤버 변수와 같은 이름으로 붙이고자 할때 this를 사용한다.
public int getRadus(){
	return radius;
}
  • 메소드가 객체 자신의 레퍼런스를 리턴해야하는 겨우에 this를 리턴하면 된다.
public Circle getMe(){
	return this;
}

 

this() 메소드

 

  • this()는 같은 클래스 내에서 생성자가 다른 생성자를 호출할 때 사용한다.
public class Book{
	
    public String title;
    public String author;
    
    void show() {
    	System.out.println(title + author);
    }
    
    public Book() {
    	this("");
    	System.out.println("생성자 호출됨");
    }
        
    public Book(String title){
    	this(title, "작자미상");
    }
    

    public Book(String title, String author) {
		this.title = title;
		this.author = author;
	}
    
    
    public static void main(String[] args){
    	
        Book emptyBook = new Book();
        emptyBook.show();
    	
    	Book loveStory = new Book("신데렐라");
        loveStory.show();                
    }
}

 

 

 

this() 사용시 주의할 점

 

  • this()는 반드시 생성자에서만 호출할 수 있다.
  • this()는 반드시 같은 클래스 내 다른 생성자를 호출할 때 사용한다.
  • this()는 반드시 생성자의 첫번째 문장이어야 한다.

 

 

 

4. 메소드 오버로딩(method overloading)

 

  • 자바에서 한 클래스 내에 이름이 같지만 매개변수의 타입이나 개수가 서로 다른 여러 개의 메소드를 중복 작성하는 것을 메소드 오버로딩이라고 한다.
  • 메소드 오버로딩은 객체 지향 프로그래밍의 특징 중 하나인 다형성(polymorphism)을 구현하는 방법 중 하나이다.

 

메소드 오버로딩의 조건

 

  • 메소드 이름이 동일해야 한다.
  • 매개변수의 개수나 타입이 서로 달라야 한다.
public class overLoading {
	
	public int sum(int a, int b) {
		return a + b;
	}
	
	public int sum(int a, int b, int c) {
		return a + b + c;
	}
    
    public int sum(int a, int b, int c) {	// 메소드와 매개변수의 개수, 타입이 모두 같기 때문에 오버로딩 실패
		return a + b + c;
	}
}

 

 

오버로딩된 메소드 호출

 

public class overLoading {
	
	public int sum(int a, int b) {
		return a + b;
	}
	
	public int sum(int a, int b, int c) {
		return a + b + c;
	}
	
	public static void main(String args[]) {
		
		overLoading sample = new overLoading();
		System.out.println(sample.sum(2, 5));
		System.out.println(sample.sum(2, 5, 10));
	}
}

 

 

 

반응형
댓글
반응형
공지사항