선언 ( Person ) class

package New_this;

	public class Person {
	    private String name;
	    private int age;
	    
	    // 생성자
	    public Person(String name, int age) {
	        this.name = name;
	        this.age = age;
	    }

	    // 메서드
	    public void sayHello() {
	        System.out.println("안녕하세요! 저는 " + name + "이고, " + age + "살입니다.");
	    }
	
	}

 

생성자

this.name( 인스턴스 변수 ) = name (참조변수)

 => 호출에서 받은 매개변수 값을 참조변수에 저장 후 인스턴스 변수에 저장

 

메서드

sayHello() 메서드 생성

 => name, age는 인스턴스 변수 

호출 ( PerEx ) class

package New_this;

public class PerEx {

	public static void main(String[] args) {
		Person person = new Person("John", 25);
		person.sayHello();  // 출력: 안녕하세요! 저는 John이고, 25살입니다.


	}

}

new Person("John", 25)를 호출하면 Person 클래스의 생성자가 호출되어

name에 "John"을, age에 25를 할당

그 후에 sayHello() 메서드를 호출하여 결과를 출력

 

 

 

생성자 오버로딩

생성자 오버로딩은 하나의 클래스 안에 여러 개의 생성자를 정의하는 것

각각의 생성자는 서로 다른 매개변수 목록을 가지고 있어서 다양한 초기화 방법을 제공

생성자의 이름은 클래스와 동일하며, 매개변수의 개수, 타입, 순서를 다르게 정의

다양한 생성자를 제공하면 객체를 생성할 때 필요한 매개변수에 맞는 생성자를 호출하여 객체를 초기화

 

 

선언 ( Person ) class

package New_this;

	public class Person {
	    private String name;
	    private int age;

	    // 매개변수 없는 생성자
	    public Person() {
	        name = "Unknown";
	        age = 0;
	    }

	    // 이름만 받는 생성자
	    public Person(String name) {
	        this.name = name;
	        age = 0;
	    }

	    // 이름과 나이를 받는 생성자
	    public Person(String name, int age) {
	        this.name = name;
	        this.age = age;
	    }

	    // 메서드
	    public void sayHello() {
	        System.out.println("안녕하세요! 저는 " + name + "이고, " + age + "살입니다.");
	    }
	
	}

 

호출 ( PerEx ) class

package New_this;

public class PerEx {

	public static void main(String[] args) {
	Person person1 = new Person();
	person1.sayHello();  // 출력: 안녕하세요! 저는 Unknown이고, 0살입니다.
	 // 매개변수 없는 생성자 호출

	Person person2 = new Person("John");
	person2.sayHello();  // 출력: 안녕하세요! 저는 John이고, 0살입니다.
	// 이름만 받는 생성자 호출
	
	Person person3 = new Person("Alice", 25);
	person3.sayHello();  // 출력: 안녕하세요! 저는 Alice이고, 25살입니다.
	// 이름과 나이를 받는 생성자 호출
	}
}

 

 

 

다른 생성자 호출 : this()

 

this()는 같은 클래스 내에서 다른 생성자를 호출하는 특별한 문법

this()를 사용하여 다른 생성자를 호출하면,

같은 클래스 내에서 생성자 오버로딩을 활용할 수 있음

this()는 생성자 내에서 첫 번째 문장으로 사용되어야 하며,

해당 생성자의 호출은 객체의 초기화 과정을 간편하게 도와줌

호출된 생성자는 실행되어 해당 인스턴스 변수들을 초기화하게 됨

 

선언 ( Person ) class

package New_this;

	public class Person {
	    private String name;
	    private int age;

	    public Person() {
	        this("Unknown"); // 매개변수가 있는 생성자 호출
	    }					 // 마지막 생성자 호출

	    public Person(String name) {
	        this(name, 0); // 두 개의 매개변수를 받는 생성자 호출
	        			   // 마지막 생성자 호출
	    }

	    public Person(String name, int age) { // 마지막 생성자
	        this.name = name; // 공통 실행 코드
	        this.age = age;
	    }

	    public void sayHello() {
	        System.out.println("안녕하세요! 저는 " + name + "이고, " + age + "살입니다.");
	    }
	
	}

 

호출 ( PerEx ) class

package New_this;

public class PerEx {

	public static void main(String[] args) {
	Person person1 = new Person();
	
	person1.sayHello();  // 출력: 안녕하세요! 저는 Unknown이고, 0살입니다.

	Person person2 = new Person("John");
	person2.sayHello();  // 출력: 안녕하세요! 저는 John이고, 0살입니다.

	Person person3 = new Person("Alice", 25);
	person3.sayHello();  // 출력: 안녕하세요! 저는 Alice이고, 25살입니다.

	}
}

 

 

 

메소드1

 

리턴 타입

리턴값이란 메소드를 실행한 후의 결과값을 말함

메소드는 리턴값이 있을 수도 있고 없을 수도 있다.

리턴값이 있는 메소드

1. 리턴값의 타입을 기술

2. 선언시 매개변수 선언  예)_double divide (int x, int y){...};

3. 호출시 매개변수값과 담을 변수 필요  예)_double result  = divide (10, 20);

4. 호출시 리턴값의 타입이 double 인데 int result  = divide (10, 20);// 컴파일 에러 

5. 4번 같은경우 만약에 자동 타입 변환되는 경우에는 컴파일 에러 안남 

6. 리턴 타입이 있다고 해서 반드시 리턴값을 변수에 저장할 필요는 없음

7. 리턴값이 중요하지 않고 메소드 실행이 중요할 경우에는 divide( 10, 20 ); 호출 가능 

 

리턴값이 없는 메소드( void )

1. 선언시 리턴값이 없는 경우 리턴타입 위치에 void로 기술 예)_void powerOn() {...};

2. 호출시 리턴값이 없기 때문에 변수에 저장할 내용이 없음 예)_powerOn();

 

 

매개 변수 선언

매개 변수는 메소드가 실행할 때 필요한 데이터를 외부로부터 받기 위해 사용 

리턴값이 있는 경우 매개 변수가 필요하고 리턴값이 없는 경우 매개변수가 필요 없음 

 

// 매개 변수가 있는 메소드 선언 예
double divide ( int x, int y ) {...};

// 호출
double divide ( 10, 20 ); 
//위에 선언할때 2개의 값을 선언했으니 호출할때도 2개의 int값을 주어야 함
// 선언할때 int 값으로 선언했으니 
// 호출시에도 매개값으로 int값이나 int타입으로 변환될 수 있는 값 넘겨주어야함

 

package New_this;

public class PerEx {

    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 20;

        printSum(num1, num2); // 메소드 호출
    }

    public static void printSum(int a, int b) { // 매개변수 선언
        int sum = a + b;
        System.out.println("두 수의 합은: " + sum);
    }
}

 

매개 변수의 개수를 모를 경우

매개 변수를 배열 타입으로 선언
//선언
int sum1(int [] values){ }
sum1() 메소드를 호출할 때 배열을 넘겨줌으로써 배열의 항목 값들을 모두 전달 가능
배열의 항목 수는 호출할 때 결정하면 됨 

//호출
int[] values = {1, 2, 3};
int result = sum1(values);
int result = sum1(new int[](1,2,3,4,5));

 

package New_this;

public class PerEx {

    public static void main(String[] args) {
    	//선언
        int[] numbers = {1, 2, 3, 4, 5}; // 배열 생성

        printArraySum(numbers); // 배열 인자 전달
    }

    public static void printArraySum(int[] array) { // 배열 타입으로 매개변수 선언
        //호출
    	int sum = 0;
        for (int number : array) {
            sum += number;
        }
        System.out.println("배열 요소들의 합: " + sum); // 배열 요소들의 합: 15

    }
}

 

+ Recent posts