📝 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]

  • 캡슐화란? 메서드 안의 일을 사용자로부터 숨겨야 한다는 개념이다.
  • 캡슐화와 은닉화의 차이점은? 속성의 접근을 제어하는 것을 은닉화, 메서드의 내부를 알지 못하도록 하는 것을 캡슐화라고 한다.
  • 데이터 보안을 강화하기 위해 반드시 지켜져야 하는 객체지향의 특징 중 하나이다.
  • 메서드의 네이밍을 추상적으로 명명하여 기능을 특정하면 사용자는 내부 로직을 알 수 없으면서, 기능만 알고 사용하게 된다.