📝 TIL
[TIL] Java 뱅킹, 호텔, 메모리구조, 캡슐화
오늘 ONEUL
2022. 5. 18. 21:40
✍ Today I Learned
[뱅킹 시스템]
- 유효성 검사 로직을 추가했다. 고객번호를 받는 경우에는 최대 고객 수보다 많지 않아야 하고, 미개설 계좌(null)가 아니어야 한다.
- 이 부분이 아주 헷갈렸는데, 고객번호 대신 고객 이름을 받는 경우에는
findUser()
메서드 내에서 null 값 처리를 해주어야 연산이 가능하다!! 계속 NullPointerException 에러가 나서 한참을 머리 쥐어뜯었다.. 찾는 고객 이름이 없는 경우 에러 메시지를 출력한다. - main 메서드를 최소한으로 줄이고 컨트롤러 클래스를 생성하여 각 메뉴의 작업을 메서드로 분리한다.
- 중요한 포인트!
- 개별적 클래스를 객체화
- 클래스 내부 데이터에 접근
- 접근할 때의 데이터 전달
- static을 붙이면 메서드 영역에 할당된다.
[호텔 객실 관리 프로그램]
- buildHotel → initializeRooms → makeRoomNum 순서로 메서드 연결해서 기능으로 전부 분리한다.
- 연산에서 데이터 타입이 String으로 나와야 하는 부분은 String.valuOf()를 추가해 더 확실하게 만들어준다.
- 전체 객실 상세 조회, 특정 객실 상세 조회, 특정 호실 투숙객 조회, 투숙객 전체 조회, 투숙객 이름으로 조회까지 전부 구현해보았다.
- 호텔 구조 자체도 2차원 배열이고, 투숙객도 배열도 받다 보니 투숙객 전체 조회에서 5번(...)의 제어문을 사용했는데 더 나은 방법이 있을지 고민해볼 필요가 있다.
- 배열을 전체 탐색한다면 for문 보다 forEach문이 낫다.
[캡슐화 encapsulation]
- 캡슐화란? 메서드 안의 일을 사용자로부터 숨겨야 한다는 개념이다.
- 캡슐화와 은닉화의 차이점은? 속성의 접근을 제어하는 것을 은닉화, 메서드의 내부를 알지 못하도록 하는 것을 캡슐화라고 한다.
- 데이터 보안을 강화하기 위해 반드시 지켜져야 하는 객체지향의 특징 중 하나이다.
- 메서드의 네이밍을 추상적으로 명명하여 기능을 특정하면 사용자는 내부 로직을 알 수 없으면서, 기능만 알고 사용하게 된다.