객체지향 프로그래밍(Object Oriented Programming)
객체지향 - 객체를 기준으로 코드를 나누는 것
객체 - 사물, 실제로 존재하는 대상
메서드 - 코드의 모음
SampleClass sc = new SampleClass(); //SampleClass를 메모리에 올리겠다
-> 메모리의 주소가 변수에 들어감
지역변수 : 메서드 안에서만 사용하는 변수
전역변수 : 클래스 전체 영역에서 사용하는 변수(초기화하지 않아도 기본으로 초기화됨)
클래스의 내용이 메모리에 올라가있는 것이 객체
올리는 과정은 객체생성
method에 파라미터를 설정해놨으면 값을 반드시 입력해야 메서드가 실행됨
return이 하는 일
1. 값을 돌려줌 2. 메서드 종료
Alba와 Boss를 통해 보는 Class
public class Alba {
//메서드 : 알바가 할 일(보스가 알바에게 시킨 일)
//파라미터 : 일을 하기 위해 필요한 것(보스가 알바에게 주는 것)
//리턴타입 : 일을 하고 난 후 돌려주는 것(알바가 보스에게 주는 것)
//주문받기 위해 필요한 것? 없음
//주문받은 후 보스에게 줄 것? 주문서
String[] order(){
System.out.println("주문 하시겠습니까?");
return new String[]{"짜장면","탕수육"};
}
//서빙하기 위해 필요한 것? 음식
//서빙 후 보스에게 줄 것? 없음
void serve(String[] foods){
System.out.println("맛있게 드세요.");
}
//계산하기 위해 필요한 것? 주문서
//계산 후 보스에게 줄 것? 없음
void pay(String[] order){
System.out.println("2만원입니다. 안녕히 가세요.");
}
}
public class Boss {
public static void main(String[] args) {
Alba alba = new Alba();
String[] order = alba.order();
System.out.println(Arrays.toString(order));
System.out.println("요리 만드는 중..... 완성!!");
String[] foods = {"완성된 짜장면", "완성된 탕수육"};
alba.serve(foods);
alba.pay(order);
}
}
계산기 클래스를 이용해서 계산하기
public class Calculator {
double plus(double a, double b){
return a + b;
}
double minus(double a, double b){
return a - b;
}
double multi(double a, double b){
return a * b;
}
double divide(double a, double b){
return a / b;
}
double remainder(double a, double b){
return a % b;
}
}
//다음을 한줄씩 계산해서 최종 결과값을 출력해주세요.
//1. 123456 + 654321
//2. 1번의 결과값 * 123456
//3. 2번의 결과값 / 123456
//4. 3번의 결과값 - 654321
//5. 4번의 결과값 % 123456
Calculator c = new Calculator();
double a = c.plus(123456, 654321);
a = c.multi(a, 123456);
a = c.divide(a, 123456);
a = c.minus(a, 654321);
a = c.remainder(a, 123456);
System.out.println(a);
과제 : Class에 메서드를 만들어서 Score2 클래스를 실행하시오
public class Score {
public static void main(String[] args) {
//student Class에서 메소드를 만들어서 main 메소드는 호출하기만 해서 사용
String[] studentNames =
{ "강나영", "강동환", "강태영", "곽지훈", "김서윤"
, "김영훈", "김진석", "김충신", "박슬기", "박채린"
, "손영태", "손영흔", "안정연", "이선우", "이수보"
, "이주홍", "이중호", "임현정", "장유진", "정신애"
, "조수경", "조하영", "조혜민", "허민정", "박지은"};
Student[] students = new Student[studentNames.length];
for(int i = 0; i < 25; i++){
Student student= new Student(); //객체생성 25개의 객체가 생성됨
student.korMake();
student.engMake();
student.mathMake();
student.sumMake();
student.avgMake();
student.name = studentNames[i];
student.rank = 1;
students[i] = student; //클래스 배열에 객체의 주소값이 저장됨
}
//성적처리 프로그램을 완성해주세요.
//석차
for(int i = 0; i < students.length;i++){
for(int j = 0; j < students.length; j++){
if(students[i].sum < students[j].sum){
students[i].rank++;
}
}
}
//석차순 정렬
for(int i = 0; i < students.length - 1; i++){
int min = i;
for(int j = i + 1; j < students.length; j++){
if(students[j].rank < students[min].rank){
min = j;
}
}
Student temp = students[i];
students[i] = students[min];
students[min] = temp;
}
//과목별 합계, 평균
int[] Sums = new int[3];
for(int i = 0; i < students.length; i++){
Sums[0] += students[i].kor;
Sums[1] += students[i].eng;
Sums[2] += students[i].math;
}
double[] avgs = new double[3];
for(int i = 0; i < avgs.length; i++){
avgs[i] = Math.round((double)Sums[i] / students.length * 100)/100.0;
}
//출력
System.out.println("이름\t국어\t영어\t수학\t합계\t평균\t석차");
for(int i = 0; i < 25; i++){
System.out.print(students[i].name +"\t"
+ students[i].kor + "\t"
+ students[i].eng + "\t"
+ students[i].math +"\t"
+ students[i].sum +"\t"
+ students[i].avg +"\t"
+ students[i].rank);
System.out.println();
}
System.out.print("과목합계");
for(int i = 0; i <Sums.length; i++){
System.out.print("\t"+Sums[i]);
}
System.out.print("\n과목평균");
for(int i = 0; i <avgs.length; i++){
System.out.print("\t" + avgs[i]);
}
}
}
Student 클래스
public class Student { // 학생 한 명, 학생이 하는 일(메소드)
int kor;
int eng;
int math;
int sum;
double avg;
String name;
int rank;
void korMake(){
kor = (int)(Math.random() * 101);
}
void engMake(){
eng = (int)(Math.random() * 101);
}
void mathMake(){
math = (int)(Math.random() * 101);
}
int sumMake(){
sum = kor + eng + math;
return sum;
}
double avgMake(){
avg = Math.round(sum / 3.0 * 100) / 100.0;
return avg;
}
}