* 기본형 매개변수
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 |