-
[JAVA] 객체지향(2)JAVA 2021. 3. 11. 14:15
안녕하세요~ 이번에도 뉴렉처님 객체지향 강의(2)를 기반으로 정리한 내용을 포스팅 합니다!
www.youtube.com/watch?v=o9arF7ybRbg
바로 시작하겠습니다~
지난 시간 내용
구조적인 프로그래밍이 효율적인줄 알았는데, 단위가 더 커지면 이것 역시 효율적인 면에서 떨어져 많은 함수들이 생겨나고,
그 함수들을 어떻게하면 효율적으로 관리할것인가?
라는 질문에 데이터를 한 CLASS에 넣어주는 것이 캡슐화 라는 것을 배웠습니다.
오늘은 코드를 통해 직접적으로 알아보겠습니다.
지난 구조적프로그래밍 예제를 복붙 합니다.
그 후, private를 지우고, 오른쪽 ExamList.java 파일에서 Exam[] exams1; 이라고 수정을 해봅시다!
[그림2]
지난 시간에 설명한 바와 같이 함수가 외부의 변화에 의해 오류가 발생하게 되었습니다.
캡슐화는 오른쪽 데이터에 영향을 받는 함수들을 같은 class에 두고 관리를 하는것이므로 ExamList에서 값을 받는 함수들을 모두 옮겨줍시다!
함수를 옮겼지만 아직도 에러가 발생합니다.
그런데 또 다른 문제점이 발생합니다ㅜㅜㅜ
바로 함수를 호출하는데서 발생하는데요. 오류메시지를 한번 보시죠!
The method inputList(ExamList) is undefined for the type Program!
오우 영어~ 저도 영어를 잘 못하긴 하지만 이 정도 해석은 가능합니다!
아하 그 메서드인풋리스트가 정의되지 않았구나, program에서!
오류가 났으면 해결해야겠죠~
어떻게 해결할까요??
바로 외부함수를 가져다 쓰겠다고 알려주면 됩니다!!
내가 좀 가져다 쓸게~~
자바는 위와 같은 표현을 어떻게 할까요
[그림6] 바로 ExamList. 을 통해서 ExamList 클래스에서 inputList를 가져다 쓸게~ 라고 하면 됩니다
다음 오류는 [그림6]과 같은 class에서 발생합니다.
마찬가지로 ExamList class 에서의 변화를 주면 Program class에서 오류가 발생하므로 이것 역시 ExamList class에 넣어두어 한번에 관리를 하는 편이 좋겠습니다.
list.exams = new Exam[3];
list.current = 0;
은 초기화 함수의 기능을 나타냅니다.
이를 해결하기 위해 init을 사용합시다!
init에서 클래스를 생성 후, 내용을 옮겨주면 캡슐화 완료!
그럼, 캡슐화 전과 후가 뭐가 달라졌나요?
-캡슐화로 인해 Exam[] exam 의 내용이 달라져도 오류 수정을 ExamList 내에서 가능하게 됩니다!
오늘은 완벽히는 아니지만 기본적인 캡슐화의 코딩에 대해 알아봤습니다! 다음에 뵙겠습니다~
'JAVA' 카테고리의 다른 글
[JAVA] 객체지향(4) - GETTER, SETTER (0) 2021.03.17 [JAVA] 객체지향(3) - 인스턴스 메소드 (0) 2021.03.14 [JAVA] 객체지향(1) (0) 2021.03.11 [JAVA] 구조적 프로그래밍(8) - 오버로드 함수 (0) 2021.03.08 [JAVA] 구조적 프로그래밍(7) (0) 2021.03.08