ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] 객체지향(2)
    JAVA 2021. 3. 11. 14:15

    안녕하세요~ 이번에도 뉴렉처님 객체지향 강의(2)를 기반으로 정리한 내용을 포스팅 합니다!

    www.youtube.com/watch?v=o9arF7ybRbg

     

     

     

     

    바로 시작하겠습니다~

     

    지난 시간 내용 

     

    구조적인 프로그래밍이 효율적인줄 알았는데, 단위가 더 커지면 이것 역시 효율적인 면에서 떨어져 많은 함수들이 생겨나고,

     

    그 함수들을 어떻게하면 효율적으로 관리할것인가?

     

    라는 질문에 데이터를 한 CLASS에 넣어주는 것이 캡슐화 라는 것을 배웠습니다.

     

    오늘은 코드를 통해 직접적으로 알아보겠습니다.

    [그림1]

    지난 구조적프로그래밍 예제를 복붙 합니다.

     

     그 후, private를 지우고, 오른쪽 ExamList.java 파일에서 Exam[] exams1; 이라고 수정을 해봅시다!

     

    [그림2]

    [그림2]

    지난 시간에 설명한 바와 같이 함수가 외부의 변화에 의해 오류가 발생하게 되었습니다.

     

     

    캡슐화는 오른쪽 데이터에 영향을 받는 함수들을 같은 class에 두고 관리를 하는것이므로 ExamList에서 값을 받는 함수들을 모두 옮겨줍시다!

     

     

     

     

     

    [그림3]

    함수를 옮겼지만 아직도 에러가 발생합니다.

     

    그런데 또 다른 문제점이 발생합니다ㅜㅜㅜ

     

    [그림4]

    바로 함수를 호출하는데서 발생하는데요. 오류메시지를 한번 보시죠!

     

     

    [그림5]

    The method inputList(ExamList) is undefined for the type Program! 

    오우 영어~ 저도 영어를 잘 못하긴 하지만 이 정도 해석은 가능합니다! 

    아하 그 메서드인풋리스트가 정의되지 않았구나, program에서!

    잘했어요

     

    오류가 났으면 해결해야겠죠~ 

    어떻게 해결할까요?? 

    바로 외부함수를 가져다 쓰겠다고 알려주면 됩니다!! 

    내가 좀 가져다 쓸게~~ 

     

    자바는 위와 같은 표현을 어떻게 할까요

    [그림6]

    [그림6] 바로 ExamList. 을 통해서  ExamList 클래스에서 inputList를 가져다 쓸게~ 라고 하면 됩니다

      

     

     

    [그림7]

    다음 오류는 [그림6]과 같은 class에서 발생합니다.

     

    마찬가지로 ExamList class 에서의 변화를 주면 Program class에서 오류가 발생하므로 이것 역시 ExamList class에 넣어두어 한번에 관리를 하는 편이 좋겠습니다.

     

    list.exams = new Exam[3];

    list.current = 0; 

     

    은 초기화 함수의 기능을 나타냅니다. 

     

    이를 해결하기 위해 init을 사용합시다!

     

    [그림8]

     

     

    [그림9]

    init에서 클래스를 생성 후, 내용을 옮겨주면 캡슐화 완료! 

     

     

     

    그럼, 캡슐화 전과 후가 뭐가 달라졌나요?

     

    -캡슐화로 인해 Exam[] exam 의 내용이 달라져도 오류 수정을 ExamList 내에서 가능하게 됩니다!

     

     

     

    오늘은 완벽히는 아니지만 기본적인 캡슐화의 코딩에 대해 알아봤습니다! 다음에 뵙겠습니다~

     

     

     

     

     

    댓글

Designed by Tistory.