쌍용교육센터 - 8일

개발자가 되고 싶어요 ㅣ 2024. 2. 27. 18:34

인자 전달 방식

1. 값 호출(Call by value)

- 기본 자료형의 값을 인자로 전달하는 방식. 값을 복사하여 전달

 

2. 참조 호출(Call by reference)

- 메서드 호출시 전달하려는 인자를 참조(객체) 자료형을 사용할 경우를 의미. 주소(reference)를 복사하여 전달

 

3. 가변 인자(Variable Arguments)

- 자료형이 일치할 때 전달하고자 하는 값의 갯수를 다르게 지정할 수 있다. 전달되는 데이터는 내부적으로 배열로 인식한다.

- 인자를 (int … n) 으로 정의해주면 해당 메서드를 사용할 때 넣은 인자들을 배열로 처리한다.따라서 하나를 넣든 여러 개를 넣든 처리가 가변적으로 처리가 가능하다. 또한 인자를 전달하지 않아도 빈 배열로 처리해서 에러가 발생하지 않는다.

public class MethodArgMain03 {

	/*
	 * 가변 인자
	 * Variable Arguments
	 * 자료형이 일치할 때 전달하고자 하는 값의 개수를 다르게 지정할 수 있음
	 * 전달되는 데이터는 내부적으로 배열로 인식함
	 */
	
	public void argTest(int ... n) { // <- n을 배열로 인식함
		for(int i=0; i<n.length; i++) {
			System.out.println(n[i]);
		}
	}
	
	public static void main(String[] args) {
		MethodArgMain03 ma = new MethodArgMain03();
		ma.argTest(1);
		ma.argTest(10,20,30);
		ma.argTest(new int[] {100,200,300});
	}
}

 

접근 제한자

https://tmddus3002.tistory.com/67

 

접근 제한자

접근 제한자 경우에 따라서는 객체의 필드를 외부에서 변경하거나 메소드를 호출할 수 없도록 막아야 할 필요가 있다. 중요한 필드와 메소드가 외부로 노출되지 않도록 해 객체의 무결성(결점

tmddus3002.tistory.com

 

메서드 오버로딩

  • Overloading(중복정의)이라는 것은 하나의 클래스 내에서 같은 이름을 가지는 메서드가 여러개 정의되는 것을 말한다. 이것은 컴파일 시 컴파일러에 의해 각 메서드들이 구별되며 기준은 인자가 된다. 인자의 타입 또는 갯수, 배치된 순서가 다를 경우 다른 메서드로 인식한다.
  • 이런 Overloading 기법이 필요한 이유는 같은 목적으로 비슷한 동작을 수행하는 메서드들을 모아 이름을 같게 하면 프로그래머로 하여금 다양한 메서드들을 같은 이름으로 일관된 작을 할 수 있다는 편리함이 있다.
    public class OverloadingMain01 {
    	/*
    	 * Method Overloading(중복정의)은 하나의 클래스 내에서 같은 이름을
    	 * 가지는 메서드가 여러 개 정의되는 것을 말함.
    	 * 메서드명은 동일하게 하고 인자의 타입 또는 개수, 배치된 순서가 다를 경우
    	 * 다른 메서드로 인식함
    	 */
    	
    	public void print(int n){
    		System.out.println("정수 n = " + n);
    	}
    	public void print(double n) {
    		System.out.println("소수 n = " + n);
    	}
    	public void print(double n, long a) {
    		System.out.println("실수 n = " + n + ", 정수 a = " + a);
    	}
    	public void print(long a, double n) {
    		System.out.println("실수 n = " + n + ", 정수 a = " + a);
    	}
    	public static void main(String[] args) {
    		OverloadingMain01 om = new OverloadingMain01();
    		om.print(20);
    		om.print(5.6);
    		om.print(3.7, 1234L);
    		om.print(5678L,5.8);
    	}
    }
    ​

 

생성자

생성자객체가 생성될 때 자동적으로 단 한번 호출되어 필드의 초기화하거나 객체 생성시 반드시 호출되어야 하는 메소드를 호출하는 역할을 한다. 생성자의 구조는 메소드와 비슷하지만 메소드명이 반드시 클래스와 동일해야 하고 리턴타입이 없다.

 

생성자의 특징

  • return Type이 전혀 정의되지 않는다.
  • 생성자의 이름이 클래스 명과 같아야 한다.
  • 생성자 내부에서 특정 작업을 수행할 수 있고 데이터를 인자에 전달하여 전달받은 데이터를 활용할 수도 있다.

 

생성자 오버로딩

기본 생성자 하나만을 명시할 수 있는 것이 아니라 다양한 인자를 전달 받아 가공할 수 있는 생성자를 여러개 만들어 사용할 수 있다. 메서드 오버로딩처럼 인자의 타입, 갯수, 배치 순서가 다를 경우 다른 생성자로 인식한다.

생성자를 오버로딩하여 작성한 경우 기본 생성자를 자동으로 만들어주지 않으니 기본 생성자를 따로 작성해야 한다.

class Car2{
	String color;
	String gearType;
	int door;
	
	public Car2() {
		
	}
	
	// 커스텀 생성자를 넣으면 기본 생성자를 안만들어줌
	public Car2(String c, String g, int d) {
		color = c;
		gearType = g;
		door = d;
	}
}

public class CarMain02 {
	public static void main(String[] args) {
//		Car2 car2 = new Car2(); // -> 커스텀 생성자가 있기 때문에 기본 생성자가 없어서 에러가 생김
		//객체 선언 및 생성
		Car2 car2 = new Car2("검정색","manual",4);
		System.out.println(car2.color+","+car2.gearType+","+car2.door);
	}
}

 

 

void 메서드

  • void 메서드는 return을 생략해도 된다. 하지만 return을 활용할 수도 있다.

 

this

객체 내부에서 객체 자신을 칭하고 싶을 때나 아니면 지역변수와 멤버변수를 구별해야 할 때도 있을 것이다. 이럴 때 사용하는 객체 자신을 가리킬 수 있는 유일한 reference이다. 이것이 바로 this이다.

 

this()

이것은 현재 객체의 생성자를 의미하는 것이다. 주의 해야 할 점은 생성자의 첫 행에 정의해야 한다는 것이며 그렇지 않으면 Compile시 오류가 발생한다. 다시 말하면 이 **this()**를 이용하여 한 클래스 내의 특정 생성자에서 Overloading되어 있는 다른 생성자를 호출할 수 있는 것이다. 그렇게 함으로 해서 생성자에서 코딩 내용이 중복되는 부분을 막을 수 있다.

'IT 국비 교육' 카테고리의 다른 글

쌍용교육센터 - 10일  (0) 2024.02.29
쌍용교육센터 - 9일  (0) 2024.02.28
쌍용교육센터 - 7일  (0) 2024.02.26
쌍용교육센터 - 6일  (0) 2024.02.23
쌍용교육센터 - 4일~5일  (0) 2024.02.21