본문 바로가기

배운 책들 정리/자바 완전 정복

자바 완전 정복 6 - 객체지향개념

1 팁

1. 

 

 

 

2 복습

1. 

 

스킵

 

 

3 이론

1.  매개 변수

 

 

2. 파라미터 테스트 1

 

Data { int x; } : 인스턴스 변수

사용법 : 객체 선언 -> 참조변수.인스턴스변수

 

3. 파라미터 테스트 2

 

 

 

4 실습

1.  객체 불러오기 실습

 

 

* C0517_01 (main)

 

package j0517;

public class C0517_01 {

	public static void main(String[] args) {
		// Card 클래스의 객체를 선언하고 생성합니다.
		Card c1 = new Card();
		
		// c1 객체의 kind, number, width 멤버 변수에 값을 할당합니다.
		c1.kind = "Heart";
		c1.number = 7;
		c1.width=500;
		c1.number = 25; // 이미 할당된 number 변수에 값을 덮어씁니다.
		
		// Card 클래스의 객체를 또 다른 참조 변수로 선언하고 생성합니다.
		Card c2 = new Card();
		
		// c2 객체의 kind, number 멤버 변수에 값을 할당합니다.
		c2.kind = "Spade";
		c2.number = 4;
		
		// Card 클래스의 객체를 또 다른 참조 변수로 선언하고 생성합니다.
		Card c3 = new Card();
		
		// c1 객체의 kind, number, width, height 멤버 변수의 값을 출력합니다.
		System.out.println("c1 카드종류 : "+c1.kind);
		System.out.println("c1 카드숫자 : "+c1.number);
		System.out.println("c1 가로길이 : "+Card.width);
		System.out.println("c1 세로길이 : "+Card.height);
		System.out.println("-----------------------");
		
		// c2 객체의 kind, number, width, height 멤버 변수의 값을 출력합니다.
		System.out.println("c2 카드종류 : "+c2.kind);
		System.out.println("c2 카드숫자 : "+c2.number);
		System.out.println("c2 가로길이 : "+Card.width);
		System.out.println("c2 세로길이 : "+Card.height);
		System.out.println("-----------------------");
		
		// c3 객체의 width 멤버 변수의 값을 출력합니다.
		System.out.println("c3 가로길이 : "+Card.width);

	}

}

 

 

* Card (클래스)

 

package j0517;

public class Card {

	// 카드의 종류를 저장하는 문자열 변수
	String kind;
	// 카드의 번호를 저장하는 정수 변수
	int number;
	// 카드의 너비를 저장하는 정수 상수
	static int width = 100;
	// 카드의 높이를 저장하는 정수 상수
	static int height = 250;

}

 

2. 객체 개념을 활용해서 계산기 기능

 

package j0517; // 이 코드는 j0517 패키지에 속합니다.

import java.util.Scanner; // Scanner 클래스를 사용합니다.

public class C0517_02 { // C0517_02 클래스입니다.

	public static void main(String[] args) { // 프로그램의 시작점입니다.
		// C0517_02 클래스의 인스턴스를 생성합니다.
		C0517_02 c = new C0517_02();
		// Scanner 클래스의 인스턴스를 생성합니다.
		Scanner scan = new Scanner(System.in);
		// int형 변수 num1을 선언하고 10으로 초기화합니다.
		int num1 = 10;
		// int형 변수 num2를 선언하고 5로 초기화합니다.
		int num2 = 5;

		// 객체선언
		// 클래스명 참조변수명 = new 클래스명();
		// Card c1 = new Card();
		// 두 수를 입력받아 더하기 결과값을 출력하시오.
		//System.out.println("1번째 숫자를 입력하세요.");
		//num1 = scan.nextInt();
		//System.out.println("2번째 숫자를 입력하세요.");
		//num2 = scan.nextInt();

		// int형 배열 num을 선언하고 크기를 2로 설정합니다.
		int[] num = new int[2];
		// for 반복문을 사용하여 num 배열의 요소를 입력받습니다.
		for (int i = 0; i < 2; i++) {
			// 사용자로부터 입력받을 숫자의 위치를 출력합니다.
			System.out.println((i + 1) + "번째 숫자를 입력하세요.");
			// Scanner 클래스의 nextInt 메소드를 사용하여 사용자로부터 정수를 입력받아 num 배열에 저장합니다.
			num[i] = scan.nextInt();
		}
		// 더하기, 빼기, 곱하기, 나누기 메소드 호출
		// add 메소드를 호출하여 두 수의 합을 구하고, 그 결과를 result1 변수에 저장합니다.
		int result1 = c.add(num[0], num[1]);
		// sub 메소드를 호출하여 두 수의 차를 구하고, 그 결과를 result2 변수에 저장합니다.
		int result2 = c.sub(num[0], num[1]);
		// multi 메소드를 호출하여 두 수의 곱을 구하고, 그 결과를 result3 변수에 저장합니다.
		int result3 = c.multi(num[0], num[1]);
		// div 메소드를 호출하여 두 수를 나눈 몫을 구하고, 그 결과를 result4 변수에 저장합니다.
		int result4 = c.div(num[0], num[1]);
		// 두 수의 합을 출력합니다.
		System.out.println("두 수의 더하기 : " + result1);
		// 두 수의 차를 출력합니다.
		System.out.println("두 수의 빼기 : " + result2);
		// 두 수의 곱을 출력합니다.
		System.out.println("두 수의 곱하기 : " + result3);
		// 두 수의 나누기를 출력합니다.
		System.out.println("두 수의 곱하기 : " + result4 );

	}

	// 더하기 메소드
	int add(int num1, int num2) {
		// 두 수를 더한 결과를 구합니다.
		int result = num1 + num2;
		// 결과를 반환합니다.
		return result;
	}

	// 빼기 메소드 sub
	int sub(int num1, int num2) {
		// 두 수의 차를 구한 결과를 구합니다.
		int result = num1 - num2;
		// 결과를 반환합니다.
		return result;
	}

	//
	//곱하기 메소드 multi
	int multi(int num1,int num2) {
		int result = num1 * num2;
		return result;
	}
	//나누기 메소드 div
	int div(int num1,int num2) {
		int result = num1 / num2;
		return result;
	}

}

 

3. 계산기 (나누기 기능 추가)

 

 

package j0517;

import java.util.Scanner;

public class C0517_03 {
    // 3개의 숫자를 입력받아 합계를 구하시오.
    // add 메소드를 사용하시오.
    public static void main(String[] args) {
        C0517_03 c = new C0517_03();
        Scanner scan = new Scanner(System.in);
        int num1 = 1;
        int num2 = 1;
        int num3 = 1;

        int[] num = new int[3];
        for (int i = 0; i < 3; i++) {
            System.out.println((i + 1) + "번째 숫자를 입력하세요");
            num[i] = scan.nextInt();
        }

        // add, sub, multi, div
        int result1 = c.add(num[0], num[1], num[2]);
        int result2 = c.sub(num[0], num[1], num[2]);
        int result3 = c.multi(num[0], num[1], num[2]);
        int result4 = c.div(num[0], num[1], num[2]);
        System.out.println("두 수의 더하기 : " + result1);
        System.out.println("두 수의 빼기 : " + result2);
        System.out.println("두 수의 곱하기 : " + result3);
        System.out.println("두 수의 나누기 : " + result4);

    }

    // 기능 선언 // add, sub, multi, div
    int add(int num1, int num2, int num3) {
        int result = num1 + num2 + num3;
        return result;
    }

    int sub(int num1, int num2, int num3) {
        int result = num1 - num2 - num3;
        return result;
    }

    int multi(int num1, int num2, int num3) {
        int result = num1 * num2 * num3;
        return result;
    }

    int div(int num1, int num2, int num3) {
        int result = num1 / num2 / num3;
        return result;
    }

}

 

4. 가장 큰 수 찾기 (3개 찾기)

 

 

package j0517;

import java.util.Scanner;

public class C0517_04 {
    // 3개의 숫자를 입력받아 가장 큰 수를 출력하시오.
    // 인스턴스 메소드 numMax() 활용
    public static void main(String[] args) {
        C0517_04 c1 = new C0517_04();
        int[] num = new int[3];
        int num1 = 0, num2 = 0, num3 = 0;
        Scanner scan = new Scanner(System.in);

        // 값 여러번 출력
        for (int i = 0; i < num.length; i++) {
            System.out.println((i + 1) + "번째 값을 입력하세요");
            num[i] = scan.nextInt();
        }

        int result = c1.numMax(num[0], num[1], num[2]);
        System.out.println("가장 큰 수 : " + result);
    }

    int numMax(int num1, int num2, int num3) {
        if (num1 > num2 || num2 > num3) {
            int result = num1;
            return result;
        } else if (num1 < num2 || num2 < num3) {
            int result = num3;
            return result;
        } else {
            int result = num2;
            return result;
        }
    }

}

 

5. 평균 구하기

 

 

package j0517;

import java.util.Scanner;

public class C0517_05 {
    // 3개의 숫자를 입력받아, 평균을 출력하세요
    // average() 함수
    // return은 string으로 (합격, 불합격)
    public static void main(String[] args) {
        C0517_05 c1 = new C0517_05();
        int[] num = new int[3];
        int num1 = 0, num2 = 0, num3 = 0;

        Scanner scan = new Scanner(System.in);

        // 값 여러번 출력
        for (int i = 0; i < num.length; i++) {
            System.out.println((i + 1) + "번째 값을 입력하세요");
            num[i] = scan.nextInt();
        }

        double result = c1.average(num[0], num[1], num[2]);
        System.out.println(result + "입니다.");
    }

    double average(int num1, int num2, int num3) {
        double result = (num1 + num2 + num3) / 3.0;
        return result;
    }

}

 

6. 파라미터 테스트 1 

 

 

* C0517_06 (main)

 

package j0517;

import java.util.Scanner;

public class C0517_06 {
	public static void main(String[] args) {
		Data d = new Data();
		d.x = 10;
		System.out.println("d.x : " + d.x);

		System.out.println("------------");
		change(d.x);
		System.out.println("change d.x : " + d.x);

	}

	static void change(int x) {
		x = 1000;
		System.out.println("x : " + x);
	}

}

// void라고 적으면 안돌려준다는 이야기

 

 

* Data (서브)

 

package j0517;

public class Data {

	int x;

}

 

7. 파라미터 테스트 2

 

 

* C0517_07 (main)

 

package j0517;

import java.util.Scanner;

public class C0517_07 {
    public static void main(String[] args) {
        Tv t1 = new Tv();
        Tv t2 = new Tv();

        t1.channel = 7;
        System.out.println("Tv t1 채널" + t1.channel);

        t2.channel = 8;
        System.out.println("Tv t2 채널" + t2.channel);

        t2 = t1;
        System.out.println("t2 채널" + t2.channel);

        t2.channel = 0;
    }
}


* Tv (sub)

 

package j0517;

public class Tv {
	String color;
	boolean power;
	int channel;
	int volume;
	
	void power() {
		power = !power;
	}
	void channelUp() {
		if(channel>=999) {
			channel=1;
			return;
		}
		channel++;
	}
	void channelDown() {
		if(channel<=1) {
			channel=999;
			return;
		}
		channel--;
	}
	void volumeUp() {
		if(volume>=100) {
			volume=100;
			return;
		}
		volume++;
	}
	void volumeDown() {
		if(volume<=0) {
			volume=0;
			System.out.println("볼륨은 0이하로는 내려가지 않습니다.");
			return;
		}
		volume--;
	}
}

 

//static  num[] 대신 void로(주소값)

 

 

8. 학생 프로그램

 

 

* Stumain

package Stu;

import java.util.Scanner;

public class Stumain {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		// TODO Auto-generated method stub
		// 1. 성적입력
		// 2. 성적출력
		// 3. 성적수정
		// 4. 등수처리
		// 5. 학생성적검색
		// 0. 프로그램종료

		// 이름,국어,영어,수학, 합계,평균 - 10명
		int choice = 0; // 선택 번호
		int count = 0; // 학생 수

		String[] s = { "이름", "국어", "영어", "수학", "합계", "평균", "등수" };
		String[] name = new String[10];
		String searchName = "";
		int[][] score = new int[10][4]; //
		double[] avg = new double[5];
		int[] rank = new int[10]; // 등수

		int chk = 0;// 존재유무(학생 존재의 유무)
		
		while (true) {
			 System.out.println("[ 학생성적처리 프로그램 ]");
			 System.out.println("1. 성적입력");
			 System.out.println("2. 성적출력");
			 System.out.println("3. 성적수정");
			 System.out.println("4. 등수처리");
			 System.out.println("5. 학생검색");
			 System.out.println("0. 프로그램종료");
			 System.out.println("-----------------------");
			 System.out.println("원하는 번호를 입력하세요.");
			 choice = scan.nextInt();
			 
			 switch (choice) {
			case 1: //성적입력
				
				break;
				
				
				
				
				
			}
			
			 
			 }//while
		
		
		
	}//main

}//class

 

* Student

 

package Stu;

public class Student {
	static String[] title = { "이름", "국어", "영어", "수학", "합계", "평균" };
	String name;
	int kor;
	int eng;
	int math;
	int total;
	double avg;
	int rank;

	void sum() {
		total = kor + eng + math;
	}

	void avg() {
		avg = total/3.0;
	}

}

 

 

 

5 문제풀이

1. 3개의 숫자를 입력 받아 작은 수부터 순차적으로 출력하시오.

 

//1. 3개의 숫자를 입력 받아 작은 수부터 순차적으로 출력하시오.
// calculate() 메소드
package j0517;

import java.util.Scanner;

public class C0517_08 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int[] arr = new int[3];

        for (int i = 0; i < arr.length; i++) {
            System.out.println("숫자 입력하세요");
            arr[i] = scan.nextInt();
        }
        // //배열정렬
        // Arrays.sort(arr);
        calculate(arr);

        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }

    static void calculate(int[] arr) {
        // arr[0] = Math.min(Math.min(arr[0], arr[1]), arr[2]); // 이렇게 하면 안됨
        int min = Math.min(Math.min(arr[0], arr[1]), arr[2]);
        int max = Math.max(Math.max(arr[0], arr[1]), arr[2]);
        int middle = (arr[0] + arr[1] + arr[2]) - max - min;

        arr[0] = min;
        arr[1] = middle;
        arr[2] = max;
    }
}

// 쓰지 말기
// package j0517;

// import java.util.Arrays;
// import java.util.Scanner;

// public class C0517_08 {
// public static void main(String[] args) {
// Scanner scan = new Scanner(System.in);
// int[] arr = new int[3];

// for (int i = 0; i < arr.length; i++) {
// System.out.println("숫자 입력하세요");
// arr[i] = scan.nextInt();
// }
// //배열정렬
// Arrays.sort(arr);

// for (int i = 0; i < arr.length; i++) {
// System.out.println(arr[i]+" ");
// }
// System.out.println();
// }
// }

// * 인공지능
// package j0517;

// import java.util.Scanner;

// public class C0517_08 {
// public static void main(String[] args) {
// Scanner scan = new Scanner(System.in);

// System.out.print("3개의 숫자를 입력하세요: ");
// int num1 = scan.nextInt();
// int num2 = scan.nextInt();
// int num3 = scan.nextInt();

// int min = num1;
// if (num2 < min) {
// min = num2;
// }
// if (num3 < min) {
// min = num3;
// }

// System.out.print(min);
// if (num1 != min) {
// System.out.print(" " + num1);
// }
// if (num2 != min) {
// System.out.print(" " + num2);
// }
// if (num3 != min) {
// System.out.print(" " + num3);
// }
// }
// }

 

 

 

 

* 핵심

- 메소드 쓰는 이유 : 소스 중복을 막기 위해서

 

 

 

 

* 0517 실습 링크

 

 

GitHub - RosePaku/bigdata_java: 빅데이터_자바의_정석

빅데이터_자바의_정석. Contribute to RosePaku/bigdata_java development by creating an account on GitHub.

github.com

 

728x90
반응형
LIST