* 기본형 매개변수

class Data
{
	int x;
	int y;
}


public class MySample {

	//객체지향프로그램 = 기본형 매개변수 시작
	public static void main(String[] args) {
		
		Data d = new Data();
		d.x = 10;
		
		System.out.println("main() x : " + d.x);
		
		change(d.x);	
		//클래스or인스턴스명이 앞에 안와도 괜찮은 이유 : 같은 클래스 내에 있는 클래스메소드(static) 호출이기때문
		
		System.out.println("main() after x : " + d.x);

	}
	
	//기본형 매개변수
	static void change(int x)	//void : change 끝났을 때 반환되는 값이 없다.
	{
		x = 1000;
		System.out.println("change() x : " + x);
	}

* 참조형 매개변수

class Data
{
	int x;
	int y;
}


public class MySample {
	
    //참조형 매개변수 시작
	public static void main(String[] args) 
	{
		Data d = new Data();
		d.x = 10;
		
		System.out.println("main() x : " + d.x);
		
		change(d);
		System.out.println("main() after x : " + d.x);
	} 
	
	static void change(Data d)
	{
		d.x = 1000;
		System.out.println("change() x : " + d.x);
	}
    
}

* 참조형 반환타임(return) + 참조형 매개변수

 

class Data
{
	int x;
	int y;
}


public class MySample {
	
    //참조형 반환타입(리턴타입) 시작
	public static void main(String[] args) 
	{
		Data d = new Data();
		d.x = 10;
		
		Data d2 = change(d);
		
		System.out.println("d.x = " + d.x);
		System.out.println("d2.x = " + d2.x);		//d.x와 d2.x의 값은 동일하지만 서로다른 주소값이다.
	}
	
	static Data change(Data d)
	{
		Data tmp = new Data();
		tmp.x = d.x  ;
		
		return tmp;
	}

}

* 참조형 반환타입 / 기본형 매개변수

class Data
{
	int x;
	int y;
}


public class MySample {

	//매개변수는 기본현, 반환타입(return타입) 참조형 시작
	public static void main(String[] args) 
	{
		int a = 5;
		Data d;
		
		System.out.println("main() a : " + a);
		
		d = change(a);
		
		System.out.println("main() after d.x : " + d.x);
		
	}
	
	static Data change(int a)
	{
		Data tmp = new Data();
		tmp.x = a + 10;
		
		return tmp;
	}
	//매개변수는 기본현, 반환타입(return타입) 참조형 끝
    
}

** 실습_참조형 매개변수/참조형 반환타입 **

/* 1
 문제)Data객체에 y변수 추가하고 main에서 2개 정수를 입력받아 Data 객체 각 변수에 대입하고.
   main에서 각 값을 출력한 후 copy 메서드를 통해 값에 2를 곱한 결과를 출력하는 프로그램.
 입력예)정수 2개를 입력하세요.>10 20
 출력예)main 입력값 d.x = 10, d.y : 20
    copy 메서드 d.x = 10, d.y : 20
    copy 메서드 tmp.x = 20, tmp.y : 40
    main 마지막 d.x = 10, d.y : 20
    main 마지막 d2.x = 20, d2.y : 40
 */

import java.util.Scanner;

class Data
{
	int x;
	int y;
}


public class MySample {
	public static void main(String[] args) 
	{
		Scanner scn = new Scanner(System.in);
		System.out.print("정수 2개를 입력하세요.>");
		
		Data d = new Data();
		d.x = scn.nextInt();
		d.y = scn.nextInt();
		
		System.out.println("main 입력값 d.x = " + d.x + ", d.y : " + d.y);
		
		copy(d);
		
		Data d2 = copy(d);
		
		System.out.println("main 마지막 d.x = " + d.x + ", d.y : " + d.y);
		System.out.println("main 마지막 d2.x = " + d2.x + ", d2.y : " + d2.y);
	}
	
	static Data copy(Data d)	//main d와 d자체는 다른 주소지만, 두개의 d가 바라보는 주소값은 같다.
	{
		System.out.println("copy 메서드 d.x = " + d.x + ", d.y : " + d.y);
		Data tmp = new Data();
		tmp.x = d.x * 2;
		tmp.y = d.y * 2;
		System.out.println("copy 메서드 tmp.x = " + tmp.x + ", tmp.y : " + tmp.y);
		
		return tmp;
	}

}

* 배열을 이용한 참조형 매개변수

public class MySample {
	
    //배열을 이용한 참조형 매개변수
	public static void main(String[] args) 
	{
		int[] a = {10, 20};
		
		System.out.println("main() a[0] : " + a[0]);
		
		change(a);
		
		System.out.println("main() a[0] : " + a[0]);
	}
	
	static void change(int[] x)
	{
		x[0] = 2000;
		System.out.println("change() x : " + x[0]);
	}
}

** 실습1115 **

/* 2
 문제)위와 동일한 형태로 하되 결과는 다르게 구현
 출력예)main 입력값 d.x = 10, d.y : 20
    copy 메서드 tmp.x = 10, tmp.y : 20
    copy 메서드 tmp.x = 20, tmp.y : 40
    main 마지막 d.x = 20, d.y : 40
 단, copy메서드의 반환타입(리턴타입) 없음.
 */

import java.util.Scanner;

class Data
{
	int x;
	int y;
}


public class MySample {
	
    public static void main(String[] args) 
	{
		Scanner scn = new Scanner(System.in);
		System.out.print("정수 2개를 입력하세요.>");
		
		Data d = new Data();
		d.x = scn.nextInt();
		d.y = scn.nextInt();
		
		System.out.println("main 입력값 d.x = " + d.x + ", d.y : " + d.y);
		
		copy(d);
		
		System.out.println("main 마지막 d.x = " + d.x + ", d.y : " + d.y);
	}
	
	static void copy(Data tmp)
	{
		System.out.println("copy 메서드 tmp.x =" + tmp.x + ", tmp.y : " + tmp.y);
		tmp.x = tmp.x * 2;
		tmp.y = tmp.y * 2;
		System.out.println("copy 메서드 tmp.x =" + tmp.x + ", tmp.y : " + tmp.y);	
	}
}

** 실습1115 **

/* 3
 문제)배열에 {3, 2, 1, 6, 5, 4}를 초기값으로 선언후에 오름차순으로 정렬하여 출력하는 프로그램.
   단, 각 메서드는 배열출력은 printArr, 배열의 모든 합은 sumArr,
    배열 정렬은 sortArr로 선언하여 구현함.
    sumArr 메서드만 리턴타입이 존재함.
 출력예)[3,2,1,6,5,4]
    [1,2,3,4,5,6]
    sum = 21
 */

//배열은 시작주소와 길이를 같이 가지고 다닌다.

 

import java.util.Scanner;

//class Data
//{
//	int x;
//	int y;
//}


public class MySample1115{

	/* 3
	 문제)배열에 {3, 2, 1, 6, 5, 4}를 초기값으로 선언후에 오름차순으로 정렬하여 출력하는 프로그램.
	 	 단, 각 메서드는 배열출력은 printArr, 배열의 모든 합은 sumArr,
	 	 	배열 정렬은 sortArr로 선언하여 구현함.
	 	 	sumArr 메서드만 리턴타입이 존재함.
	 출력예)[3,2,1,6,5,4]
	 	  [1,2,3,4,5,6]
	 	  sum = 21
	 */
	
	//배열은 시작주소와 길이를 같이 가지고 다닌다.
	
	public static void main(String[] args)
	{
		int[] arr = new int[] {3, 2, 1, 6, 5, 4};	//int[] arr = {3, 2, 1, 6, 5, 4}; 이렇게해도된다.
		printArr(arr);
		sortArr(arr);
		printArr(arr);
		System.out.println("sum = " + sumArr(arr));
	}
	
	static void sortArr(int[] x)	//클래스 메서드 | int[] x -> 배열로 받겠다는 의미
	{
		int i, j, tmp;
		
		for(i = 0 ; i < x.length - 1 ; i++)
		{
			for(j = i + 1 ; j < x.length ; j++)
			{
				if(x[i] > x[j])
				{
					tmp = x[i];
					x[i] = x[j];
					x[j] = tmp;
				}
			}
		}
	}
	
	static void printArr(int[] arr)
	{
		int i;
		System.out.print("[");
		for(i = 0 ; i < arr.length ; i++) 
		{
//			//쉼표를 먼저 찍을 경우
//			if(i != 0 && i != arr.length)
//				System.out.print(", ");
			
			System.out.printf("%d", arr[i]);
			if(i != arr.length -1)
				System.out.print(", ");

		}
		System.out.print("] \n");
	}
	
	static int sumArr(int[]a)
	{
		int sum = 0, i;
		for(i = 0 ; i < a.length ; i++)
		{
			sum += a[i];
		}
		return sum;
	}
	
}

 


** 실습1115_2 **

//객체지향프로그램 - 참조형 매개변수
/* 4
 문제)두 정수를 Add클래스 a, b변수에 입력받은 후 더하기, 뺴기, 곱하기, 나누기 메서드를 이용하여 
   결과를 모두 main에서 출력하는 프로그램.(결과는 c변수 사용)
   단, 더하기 add, 빼기 sub, 곱하기 mul, 나누기 div 로 정의하며, 
     참조형 매개변수를 활용한 메서드 구현, 전부 반환타입이 없음.
 입력예)두 정수를 입력하세요.>5 3
 출력예)더하기 : 8
     뺴기 : 2
     곱하기 : 15
     나누기 : 1
 */

import java.util.Scanner;

class Add
{
	int a;
	int b;
	int c;
}

public class MySample1115_2 {

	public static void main(String[] args) {
		
		//객체지향프로그램 - 참조형 매개변수
		/* 4
		 문제)두 정수를 Add클래스 a, b변수에 입력받은 후 더하기, 뺴기, 곱하기, 나누기 메서드를 이용하여 
		 	 결과를 모두 main에서 출력하는 프로그램.(결과는 c변수 사용)
		 	 단, 더하기 add, 빼기 sub, 곱하기 mul, 나누기 div 로 정의하며, 
		 	  	참조형 매개변수를 활용한 메서드 구현, 전부 반환타입이 없음.
		 입력예)두 정수를 입력하세요.>5 3
		 출력예)더하기 : 8
		 	   뺴기 : 2
		 	   곱하기 : 15
		 	   나누기 : 1
		 */
		
		Scanner scn = new Scanner(System.in);
		
		System.out.print("두 정수를 입력하세요.>");
		
		Add ad = new Add();		//Add 클래스의 인스턴스 객체 생성
		
		ad.a = scn.nextInt();
		ad.b = scn.nextInt();
		
		add(ad);
		System.out.println("더하기 : " + ad.c);
		sub(ad);
		System.out.println("빼기 : " + ad.c);
		mul(ad);
		System.out.println("곱하기 : " + ad.c);
		div(ad);
		System.out.println("나누기 : " + ad.c);
	}
	
	
	static void add(Add a){
		a.c = a.a + a.b;
	}
	
	static void sub(Add ad){
		if (ad.a > ad.b)
			ad.c = ad.a - ad.b;
		else
			ad.c = ad.b - ad.a;
	}
	
	static void mul(Add ad){
		ad.c = ad.a * ad.b;
	}
	
	static void div(Add ad){
		ad.c = ad.a / ad.b;
	}

}

** 실습1115_2 **

//참조형 매개변수를 이용한 메서드를 Add 클래스에 구현한 경우

 

//참조형 매개변수를 이용한 메서드를 Add 클래스에 구현한 경우
class Add{
	
	int a;
	int b;
	int c;
	
	static void add(Add a){
		a.c = a.a + a.b;
	}
	
	static void sub(Add ad){
		if (ad.a > ad.b)
			ad.c = ad.a - ad.b;
		else
			ad.c = ad.b - ad.a;
	}
	
	static void mul(Add ad){
		ad.c = ad.a * ad.b;
	}
	
	void div(Add ad){		//인스턴스 메소드
		ad.c = ad.a / ad.b;
	}
}

//참조형 매개변수를 이용한 메서드를 Add 클래스에 구현한 경우

public class MySample1115_2 {

	public static void main(String[] args) {
		
		
		Scanner scn = new Scanner(System.in);
		
		System.out.print("두 정수를 입력하세요.>");
		
		Add ad = new Add();		//Add 클래스의 인스턴스 객체 생성
		
		ad.a = scn.nextInt();
		ad.b = scn.nextInt();
		
		Add.add(ad);
		System.out.println("더하기 : " + ad.c);
		Add.sub(ad);
		System.out.println("빼기 : " + ad.c);
		Add.mul(ad);
		System.out.println("곱하기 : " + ad.c);
		ad.div(ad);
		System.out.println("나누기 : " + ad.c);
	}

}

 



** 메서드 오버로딩 (overloading) **

한 클래스 내에 같은 이름의 메서드를 여러개 정의

메서드 이름이 같아야 함

매개변수의 개수 또는 타입이 다르게 구현

반환 타입은 오버로딩을 구현하는데 아무런 영향을 주지 못함

 

예 : System.out.println 메서드

매개변수로 지정하는 값의 타팁에 따라 호출되는 println메서드가 다름

void println()

 


** 실습1115_3 **

public class MySample1115_3 {

	public static void main(String[] args) {
		
		//메서드 오버로딩
		MySample1115_3 m = new MySample1115_3();
		System.out.println("sum()메서드 매개변수 2개 : " + m.sum(5,  8));
		System.out.println("sum()메서드 매개변수 3개 : " + m.sum(1, 2, 3));
		m.sum(2);
		
	}
	
	int sum(int a, int b){
		return a + b;
	}
	
	void sum(int a) {
		System.out.println("sum()메서드 1개 a : " + a);
	}
	
	int sum(int a, int b, int c){
		return a + b + c;
	}

}

** 실습1115_4 **

// 메소드 오버로딩

class MyMath{
	
	int a;
	int b;
	
	int add(int a, int b) {
		return a + b;
	}
	
	int subtract(int a, int b) {
		return a - b;
	}
	
	int multiply(int a, int b) {
		return a * b;
	}
	
	int divide(int a, int b) {
		return a / b;
	}
	
	int add() {
		return a + b;
	}
	
	int subtract() {
		return a - b;
	}
	
	int multiply() {
		return a * b;
	}
	
	int divide() {
		return a / b;
	}
}


public class MySample1115_4 {

	public static void main(String[] args) {
		
		//메서드 오버로딩
		MyMath m = new MyMath();
		m.a = 200;
		m.b = 100;
		
		System.out.println(m.add(200, 100));
		System.out.println(m.subtract(200, 100));
		System.out.println(m.multiply(200, 100));
		System.out.println(m.divide(200, 100));
		
		System.out.println(m.add());
		System.out.println(m.subtract());
		System.out.println(m.multiply());
		System.out.println(m.divide());

	}
	
}

** 실습1115_5 **

//메서드 오버로딩
/*
 출력예)Java
    a : 100
    a : 89 b : 99
    double a : 99.12
    total rest 결과 : 198.24 (바로 위 99.12 * 2 한 값)
    단, 인스턴스변수 없음
 */


class OverLoad1{
	int a, b;
	
	void test() {
		System.out.println("Java");
	}
	
	void test(int a) {
		System.out.println("a : " + a);
	}
	
	void test(int a, int b) {
		System.out.println("a : " + a + "  b : " + b);
		
	}
	
	double test(double a) {
		System.out.println("double a : " + a);
		return a * 2;
		
	}
		
}

public class MySample1115_5 {

	public static void main(String[] args) {
		
		//메서드 오버로딩
		/*
		 출력예)Java
		 	  a : 100
		 	  a : 89	b : 99
		 	  double a : 99.12
		 	  total rest 결과 : 198.24 (바로 위 99.12 * 2 한 값)
		 	  단, 인스턴스변수 없음
		 */
		
		OverLoad1 o = new OverLoad1();
		double t;
		
		o.test();
		o.test(100);
		o.test(89, 90);
		t = o.test(99.12);		// t = 의 뜻은 o.test(99.12)에 리턴이있다는 의미.
		System.out.println("total rest 결과 : " + t);

	}

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'수업끄적끄적_7MONTH > Java' 카테고리의 다른 글

11/17 수업 (15회차) _ 상속  (1) 2023.11.17
11/16 수업 (14회차) _ 메소드 오버로딩 / 생성자  (0) 2023.11.16
11/14 수업 (12일차)  (1) 2023.11.14
11/13 수업 (11일차)  (2) 2023.11.13
11/10 수업 (10일차)  (0) 2023.11.10

+ Recent posts