본문 바로가기

국비지원_핀테크

10일차_ [java] 오버로딩 ( overloading ), 변수의 종류

 

 

 

 

 

오버로딩 ( overloading )

오버로딩 ( overloading )

 

package overloading;

class TestClass01{
	public void sumFunc() {
		System.out.println("매개변수 없는 sumFunc");
	}
	
	public void sumFunc(int a, int b) {
		System.out.println("매개변수가 있는 sumFunc");
		System.out.println(a + b);
	}
	
	public void sumFunc(String a, String b) {
		System.out.println(a + b);
	}
}



public class Ex01 {
	public static void main(String[] args) {
		TestClass01 t= new TestClass01();
		t.sumFunc(); // 매개변수가 존재하지 않는 sumFunc 메소드를 호출
		t.sumFunc(10, 20); // int 자료형 두 개가 매개변수로 존재하는 sumFunc 메소드를 호출
		t.sumFunc("안녕", "하세요"); // String 자료형 두 개가 매개변수로 존재하는 sumFunc 메소드를 호출
	}
}

매개변수의 갯수에 따라 동일한 메소드 명이라고 하더라도 호출되는 메소드가 다르다

( 만약 오버로딩이 불가능하다면, 동작은 동일하게 하지만 매개변수의 숫자가 달라질때마다 메소드의 이름을 계속 다르게 생성해야하기 때문에 오버로딩을 사용한다 )

 

 

 

 

 

 

 

 

 

 

변수의 종류

변수의 종류

 

package variable;

class Test01{
	public int test1() { // test1 범위 생성
		int num = 100; // test1 의 지역변수
		System.out.println("test1 : " + num);
		return num;
	}
	public void test2(int num) { // test2 범위 생성
		System.out.println("num : " + num);
		
	}
}

public class Ex01 {
	public static void main(String[] args) {
		
		Test01 t = new Test01();
		int a = t.test1(); // test1 메소드의 지역변수를 return 값으로 받아와서 변수에 저장
		t.test2(a); // 저장한 변수를 test2 메소드에 매개변수로 전달하여 사용
		
		
		
		
		
		
		
		String name = "홍길동"; // main 의 지역 변수
		if(true) {
			String n = "1111"; // if 문의 지역 변수
			name = "김개똥";
		}
		// main > if
		// if 문의 지역 변수를 main 에서 사용할 수 없기 때문에 오류 발생
		// System.out.println(n);
		System.out.println(name);
		
	}
}

지역변수와 변수의 범위

 

package variable;

class Test02{
	public int num; // 인스턴스 변수 선언
	
	public void test1() {
		num = 100; // 인스턴스 변수의 값을 변경 ( 같은 클래스 내에서 가능 )
		System.out.println("test1 : " + num);
	}
	public void test2() {
		// 상위의 num 이라는 클래스 변수가 존재하기 때문에 해당 변수 num 을 사용
		System.out.println("test2 : " + num);
	}
	
}

public class Ex02 {
	public static void main(String[] args) {
		Test02 t = new Test02();
		// 객체를 생성할때는 클래스 변수, 인스턴스 변수, 메소드 명을 가지고 객체가 생성된다
		// 이때 생성된 객체는 상속받은 클래스의 메소드 내의 지역변수는 가지고 태어나지 않으며
		// 클래스 변수와 메소드 명만 가지고 태어난 후 메소드를 사용할 때
		// 메소드 내에 선언된 지역변수를 호출하여 사용한뒤 메소드 사용이 끝나면 해당 지역변수는
		// 다시 폐기처리된다.
		t.test1();
		t.test2();
	}
}

클래스 변수와 지역변수의 차이

 

package variable;

public class Variable {
	int instanceVariable; // 인스턴스 변수 - 클래스를 호출하여 인스턴스화 시켜야 사용할 수 있다
	static int classVariable; // 클래스 변수 - 클래스를 호출하여 인스턴스화 시키지 않아도 사용할 수 있다
	
	public int method() {
		int localVariable = 0; // 지역 변수 - 메소드가 실행될때 사용할 수 있다
		return localVariable;
	}
	
	public static void main(String[] args) {
		
		// 클래스 변수는 객체를 호출하여 인스턴스화 하지 않아도 바로 사용이 가능하다
		Variable.classVariable = 1;
		System.out.println(Variable.classVariable);
		
		// 인스턴스 변수는 객체를 호출하여 인스턴스화 해야 사용이 가능하다
		Variable variableTest = new Variable();
		variableTest.instanceVariable = 2; // 인스턴스화 한 뒤에야 변수 호출이 가능
		System.out.println(variableTest.instanceVariable);
		
		// 
		int num = variableTest.method();
		System.out.println(num);
		
	}
}

인스턴스 변수, 클래스 변수, 지역 변수의 차이

 

객체 - 틀

인스턴스 - 틀로 찍어낸 상품

 

클래스 변수는 인스턴스화 시키지 않아도 클래스에 접근할 수 있으면 호출할 수 있는 변수이다.

인스턴스 변수는 객체를 호출하여 인스턴스화 시킨 뒤 호출할 수 있는 변수이다.

 

즉, 인스턴스 변수는 같은 클래스 내에서는 바로 접근이 가능하기 때문에 같은 클래스 내부의 메소드에서 많이 사용되는 변수의 경우

인스턴스 변수로 선언하여 사용하며, 클래스 변수는 다른 파일들에서 동일한 변수 값을 많이 사용해야하는 경우 클래스 호출만으로

변수를 사용하기 위해 사용된다.

 

package variable;

class Test04{
	public int num; // 인스턴스 변수
	public static String msg = "연습"; // 클래스 변수
}

public class Ex04 {
	public static void main(String[] args) {
		
		System.out.println("변경 전 : " + Test04.msg); // 클래스 변수 호출
		Test04.msg = "1111"; // 클래스 변수 변경
		System.out.println(Test04.msg); // 변경된 클래스 변수 호출
		
		Test04 t = new Test04(); // 인스턴스 생성
		t.num = 100; // 인스턴스 변수 호출 및 변경
	}
}

클래스 변수와 인스턴스 변수

 

클래스 변수와 인스턴스 변수

 

package variable;

class Test07{
	public static final String KOREA = "대한민국";
	public static int num;
	static {
		num = 12345;
	}
}

public class Ex07 {
	public static void main(String[] args) {
		System.out.println(Test07.KOREA);
		System.out.println(Test07.num);
		// final 로 KOREA 변수 값을 상수화 시켰기 때문에 변경 불가
		// Test07.KOREA = "미국";
	}
}

static - 호출하지 않아도 미리 생성

final - 상수화

 

 

 

 

 

 

 

 

 

 

실습 예제

실습 예제

 

 

예제 풀이

package variable;

public class MainClass {
	public static void main(String[] args) {
		
		TestClass test = new TestClass();
		test.input();
		test.operate();
		test.printData();
		
	}
}

MainClass

 

package variable;

import java.util.Scanner;

public class TestClass {
	public String name, grade;
	public int kor, eng, math, sum;
	public double avg;
	
	// 입력 메소드
	public void input() {
		Scanner sc = new Scanner(System.in);
		System.out.print("이름을 입력하세요 : ");
		name = sc.next();
		System.out.print("국어 점수를 입력하세요 : ");
		kor = sc.nextInt();
		System.out.print("영어 점수를 입력하세요 : ");
		eng = sc.nextInt();
		System.out.print("수학 점수를 입력하세요 : ");
		math = sc.nextInt();
	}
	
	// 연산 메소드
	public void operate() {
		sum = kor + eng + math;
		avg = (double)sum / 3;
		if(avg > 90)	grade = "A";
		else if(avg > 80)	grade = "B";
		else grade = "C";
	}
	
	// 출력 메소드
	public void printData() {
		System.out.println("이름 : " + name);
		System.out.printf("국 : %d, 영 : %d, 수 : %d\n", kor, eng, math);
		System.out.println("합 : " + sum);
		System.out.println("평균 : " + avg);
		System.out.println("등급 : " + grade);
	}
}

TestClass

 

실습 코드 입, 출력

728x90