ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] 객체지향(4) - GETTER, SETTER
    JAVA 2021. 3. 17. 00:33

    안녕하세요 이번 포스팅은

    www.youtube.com/watch?v=cStPUeKgSCU&list=PLq8wAnVUcTFX4E2NplMvJfqlcgAeF_BxK&index=8

    을 정리한 내용입니다. 

     

     

     

    오늘은 GETTER와 SETTER에 대해 알아보도록 하겠습니다!

     

    일단 첫번째로 지난 포스팅에서 캡슐화에 대해 배웠고, 캡슐화를 했습니다.

     

    완벽한 캡슐화가 된것일까요? 

    제가한번 실험해보겠습니다.
    ㅜㅜ

    Exam 클래스에서 kor의 값을 바꾸고 저장을 하니 외부 클래스에 영향을 받아습니다.

     

    분명 캡슐화를 했는데 말이죠..

     

    그럼 캡슐화를 진행하기 위해서 kor을 사용하고있는 함수를 옮겨야할까요?  

     

     

    아닙니다!

     

    PrintList가 있어야할 자리는 ExamList 가 맞습니다

    네가사는 그 클래스~

    그럼 어떻게 해야 외부 클래스의 내용변경에 변하지 않을까요?

     

     getter와 setter를 이용해서 처리하면 된다고 합니다!

     

    부탁을 해봅시다 printList() 함수에서  Exam exam = exams[i] 를 통해 exam이란 객체를 만들었습니다.

    이 exam에게 부탁을 합시다 exam아.. 국어성적좀 줄래? 영어성적도.. 수학성적도..

    어떻게 부탁하는지 알아봅시다!

     

    위와 같은 방법으로 영어 수학도 getEng();, getMath(); 란 함수를 만들어 줍니다.

     

     

    위처럼 했지만 아직 남은 오류가 있습니다!

     

     

     

    inputList() 메소드

    exam.kor = kor; 은

    입력받은 kor점수를 Exam클래스의 kor에 직접적으로 담아주는 역할을 합니다.

    그래서 당연히 Exam클래스에서 kor의 변수명이 바뀐다면 오류가 발생하죠

    그럼 바꿔주도록 합시다!

     

    exam에게 setKor(kor)  [kor의 값을 받는 setKor함수를 만들어 달라]을 만듭니다

        마찬가지로 setEng,setMath 도 만들고 

     

    입력받은 kor의 값을 Exam 클래스의 kor1에 저장합니다.

     

    마지막으로 코드를 남기겠습니다.

     

     

     

    package part3.ex3.Getters와Setters;
    
    import java.util.Scanner;
    
    public class Program {
    
    	public static void main(String[] args) {
    
    		ExamList list = new ExamList();
    
    		list.init();
    		//
    
    		int menu;
    		boolean keepLoop = true;
    
    		while (keepLoop) {
    			menu = inputMenu();
    
    			switch (menu) {
    			case 1:
    				// ExamList.inputList(list);
    				// ExamList에 있는 inputList를 사용하겠다.
    				list.inputList();
    				break;
    			case 2:
    				list.printList();
    				break;
    
    			case 3:
    				System.out.println("Bye~");
    
    				keepLoop = false;
    				break;
    
    			default:
    				System.out.println("잘못된 값을 입력하셨습니다. 메뉴는 1~3까지 입니다.");
    			}
    		}
    	}
    
    	static int inputMenu() {
    		Scanner scan = new Scanner(System.in);
    
    		System.out.println("┌───────────────────────────┐");
    		System.out.println("│           메인 메뉴          │");
    		System.out.println("└───────────────────────────┘");
    		System.out.println("\t1. 성적입력 ");
    		System.out.println("\t2. 성적출력 ");
    		System.out.println("\t3. 종료 ");
    		System.out.println("\t선택> ");
    		int menu = scan.nextInt();
    
    		return menu;
    	}
    }

     

     

     

    package part3.ex3.Getters와Setters;
    
    public class Exam {
    
    	int kor1;
    	int math;
    	int eng;
    	public int getKor() {
    		return kor1;
    	}
    	public int getEng() {
    		return eng;
    	}
    	public int getMath() {
    		return eng;
    	}
    	public void setKor(int kor) {
    		
    		this.kor1 = kor;
    		
    	}
    	public void setEng(int eng) {
    		
    		this.eng = eng;
    		
    	}
    
    	public void setMath(int math) {
    
    		this.math =math;
    	}
    }

     

    package part3.ex3.Getters와Setters;
    
    import java.util.Scanner;
    
    public class ExamList {
    	private Exam[] exams;
    	private int current;
    	
    
    	  public void printList() {
    			printList(current);
    		}
    	 
    	 public void printList(int size) {
    		System.out.println("┌───────────────────────────┐");
    		System.out.println("             성적  출력         ");
    		System.out.println("└───────────────────────────┘");
    		System.out.println();
    
    		//int size = list.current;
    		Exam[] exams = this.exams;
    		
    		for (int i = 0; i < size; i++) {
    			Exam exam = exams[i];
    			// 변수가 반복문 안에서 사용되어도 큰 문제 ㄴㄴ
    			int kor = exam.getKor();//exam.kor;
    			int eng = exam.getEng();
    			int math = exam.getMath();
    
    			int total = kor + eng + math; // exams[0].kor + ...
    			float avg = total / 3.0f;
    
    			System.out.printf("국어 %d\n", kor);
    			System.out.printf("영어 %d\n", eng);
    			System.out.printf("수학 %d\n", math);
    
    			System.out.printf("총점 : %3d\n", total);
    			System.out.printf("평균 : %6.2f\n", avg);
    			System.out.println("─────────────────────────────");
    
    		}
    	 }
    	 
    
    	 public void inputList() {
    				Scanner scan = new Scanner(System.in);
    
    				System.out.println("┌────────────────────────────┐");
    				System.out.println("           성적  입력            ");
    				System.out.println("└────────────────────────────┘");
    				System.out.println();
    
    				int kor, eng, math;
    
    				do {
    					System.out.printf("국어:");
    					kor = scan.nextInt();
    
    					if (kor < 0 || 100 < kor)
    						System.out.println("국어성적은 0~100 까지의 범위만 입력 가능합니다.");
    
    				} while (kor < 0 || 100 < kor);
    
    				do {
    					System.out.printf("영어:");
    					eng = scan.nextInt();
    
    					if (eng < 0 || 100 < eng)
    						System.out.println("영어성적은 0~100 까지의 범위만 입력 가능합니다.");
    
    				} while (eng < 0 || 100 < eng);
    
    				do {
    					System.out.printf("수학:");
    					math = scan.nextInt();
    
    					if (math < 0 || 100 < math)
    						System.out.println("수학성적은 0~100 까지의 범위만 입력 가능합니다.");
    
    				} while (math < 0 || 100 < math);
    
    				Exam exam = new Exam();
    				// 실제 국영수방을 만들어준다
    
    				exam.setKor(kor);//exam.kor = kor;
    				exam.setEng(eng);
    				exam.setMath(math);
    				
    				Exam[] exams = this.exams;
    				int size = this.current;
    				
    				if(exams.length == this.current) {
    					Exam[] temp = new Exam[size + 5];
    					
    					for(int i=0; i<size;i++)
    						temp[i] = exams[i];
    					
    					this.exams = temp;
    				}
    				
    				this.exams[this.current] = exam;
    				this.current++;
    			}
    	 
    
    	public void init() {
    		
    		exams = new Exam[3];
    		current =0; 
    		
    	}
    
    }

     

     

      getter와 setter를 사용하는 이유에 대해서 알아보았습니다!

     

     

     

    'JAVA' 카테고리의 다른 글

    [JAVA] 객체지향(6) 코드 재사용  (0) 2021.03.17
    [JAVA] 객체지향(5) - UI코드의 분리  (0) 2021.03.17
    [JAVA] 객체지향(3) - 인스턴스 메소드  (0) 2021.03.14
    [JAVA] 객체지향(2)  (0) 2021.03.11
    [JAVA] 객체지향(1)  (0) 2021.03.11

    댓글

Designed by Tistory.