[java] 생성자, overloading

김남균·2023년 8월 18일
0

java

목록 보기
7/15

공부한 내용을 정리하는 글이라 틀린 내용이 있을 수 있습니다!

오늘 학습한 생성자, overloading에 대한 정리.


오버로딩


오버로딩이란 한 클래스 내에 같은 이름의 메서드를 여러개 정의 하는것
1.메서드 이름이 같아야됨.
2.매개변수 갯수 또는 타입이 달라야 한다.
ㄴ메서드 이름이 같더라도 매개변수 다르면 서로 구별될수 있기 때문에 오버로딩 가능함.

매개변수의 이름만 다를뿐 매개변수의 타입이 같기 때문에
	오버로딩이 성립 X
	int add(int a, int b) {
		return a+b;
	}
	int add(int x, int y) {
		return x+y;
	}
	
	아래는 매개변수는 동일하나 순서가 다르다.
	호출될때 매개변수 값에 의해 메서드가 구분되므로 오버로딩으로 간주한다.
	long add(int a, long b) {
		return a+b;
	}
	long add(long a, int b) {
		return a+b;
	}

밑에 코드는 몇가지 예제를 적어보았다.

public class OverloadingExam {

	public static void main(String[] args) {
	
		PrintArray(new int[] {1,2,3,4});
		
		int[] arr = {1,2,3,4,5};
		PrintArray(arr);//매개변수로 전달해서 출력
		
		int sum = calculateSum(arr);
		System.out.println(sum);
		
	}
	
	int sum(int a, int b) {
		return a+b;
	}
	long sum(long a, long b) {
		return a+b;
	}
	
	int sum(int[] arr) {
		int res=0;
		
		for (int i=0; i<arr.length; i++) {
			res+=arr[i];
		}
		return res;
	}
	
	
	static void PrintArray(int[] a) {
		System.out.println(Arrays.toString(a));
	}
	static int calculateSum(int[] arr) {
		int sum=0;
		for(int num : arr) {
			sum+=num;
		}
		return sum;
	}
	
	//배열의 요소의 최대값 구하기
	static int findMaxValue(int[] arr) {
		int max=arr[0];
		
		for (int num : arr){//배열 요소를 돌면서
			if(num>max) {//현재 요소가 최대값보다 크다면
				max=num;//최대값을 현재 요소로 업데이트한다
			}
		}
		return max;	
	}
	
	//배열의 평균 구하기
	static double Average(double[] arr) {	
		double sum=0;
		for(double value : arr) {
			sum+=value;
		}
		return sum/arr.length;
	}
	
	//짝수가 몇개냐
	static int EvenNumber(int[] arr) {	
		int count = 0;
		for(int num : arr) {
			if(num%2==0) {//짝수냐?
				count++;//그럼 증가
			}
		}
		return count;
	}
	
	//특정값이 있는 인덱스를 찾아라.
	static int findIndexOfValue(double[] arr,double target) {
		for(int i = 0; i<arr.length; i++) {
			if(arr[i]==target) { //현재 요소가 타겟과 같다면
				return i;    //해당 인덱스를 뱉어라
			}
		}
		return -1;
	}
	
	
}

생성자


생성자는 인스턴스가 생성될때 호출된다.
인스턴스 변수의 초기화 작업에 주로 사용되며 클래스내에 선언한다, 구조도 메서드와 유사함.
return 값이 없음(그렇다고 앞에 void를 붙여야하나?놉!)
클래스와 이름이 동일해야함.
한줄 요약하자면 인스턴스가 호출 될때 생성되는 인스턴스 변수 초기화 작업이다!


사실 모든 클래스에는 반드시 생성자가 정의 되어 있어야한다.
생성자를 명시적으로 정의하지 않고도 인스턴스를 생성할수 있는 이유는
컴파일러가 default Constructor를 자동적으로 추가하기 때문임.

또한 생성자에서 다른 생성자 호출이 가능하다
같은 클래스의 멤버들 간에 서로 호출할수 있는 것처럼 생성자 간에도 서로 호출이 가능하다.
1.생성자의 이름으로 클래스 이름 대신 this를 호출한다.
2.한 생성자에서 다른 생성자를 호출할때는 반드시 첫 줄에서만 호출 가능하다.

이런 식으로도 활용할 수 있는데 좀 헷갈린다 왜이렇게 헷갈려하는지 모르겠다.
익숙해지도록 노력해야겠다.


1개의 댓글

comment-user-thumbnail
2023년 8월 18일

훌륭한 글 감사드립니다.

답글 달기