🚀 bitcamp TIL (21.07.21)
TIL

🚀 bitcamp TIL (21.07.21)

📌 18일차(2021-07-21,수)

  • 자바 객체지향 문법(eomcs-java/com.eomcs.oop)
    • ex01
      • 객체 지향 문법 요약 정리
  • 실전 프로젝트(eomcs-java-project)
    • 05-c. 인스턴스 사용법 : 인스턴스 메서드가 필요한 이유와 사용법

📌 알게된 점


  • local 변수의 lifecycle

    • 언제 생성되어서 언제 소멸되는지 어디에 만들어지는지?
    • 메서드가 생성될 때, 메서드가 종료될 때, JVM stack
  • 사용자 데이터 타입 => 인스턴스 필드(변수) non-static 변수

  • 클래스 변수 - 클래스가 로딩될 때 한 번만 생성된다. (공용적으로 관리)

  1. new 연산자를 사용하면 heap에 클래스가 복제된다?
    • 인스턴스 변수가 없으면요? 안만들어지나요?
  2. static 메서드와 instance 메서드는 JVM stack, Heap에 생성된다?
  • 만약 인스턴스 변수가 없을떄 new로 인스턴스 생성하면 Heap 영역에 아무것도 만들어지지 않나요?

    • 아니다
    • 인스턴스변수 + 클래스이름,변수이름등 부가적인정보 => 인스턴스 기본정보들이 만들어진다.
  • Heap에는 메서드 코드가 없어. 메서드는 method area에 있지

  • 뇌피설인지 근거가 있는지 잘 생각해봐 너의 상상인지

  • static method , instance method => method area (★★★★★)

  • JVM stack, Heap => 변수

  • 인스턴스 메서드에는 this가 있다 this라는 built-in 변수가 자동으로 추가된다.

    • 그래서 new로 만들어진 인스턴스의 주소를 파라미터로 넘길 필요가 없다.
  • 인스턴스 변수를 쓰기 때문에 인스턴스 메서드다.

  • 인스턴스를 사용하지 않는 메서드는 스태틱으로 만들어라

  • 사용자의 정보를 저장한다고 가정할때 처음에 이름, 나이, 성별 등등 낱개 배열로 다루었다면 - 회원 데이터를 저장할 메모리를 따로 설정하자 (메모리 구조를 따로 설계하자) - 복합데이터 구조 설계(마치식판처럼) 데이터를 처리할 변수들을 한 묶음으로 설정한다.
    낱개보다 덩어리로 다룬다.(적합하게 편하게) domain=VO=DTO

new BoardHandler() 명령의 의미는?

  • 객체지향의 핵심은 인간의 시각으로 읽는 것이다.
  1. BoardHandler가 작업하는 동안 사용할 변수 준비. (이것의 의미 이해하면 class 잘짠다.)

    • BoardHandler의 메서드가 실행하는 동안 사용할 변수를 준비하라.
    • 게시판을 다룬다? 그러면 게시글을 작업할떄 사용할 변수를 준비
  2. BoardHandler 설계도에 따라 변수를 준비하라

  3. BoardHandler의 인스턴스 생성

  • 1-> 3 갈수록 기계적해석이다.

new Board() 명령의 의미 (무엇이 중점인지 파악해)

  1. Board 데이터를 저장할 변수를 준비하라. (메모리를 준비하라)
  2. Board 설계도에 따라 변수를 준비하라

new 연산자 쓸 때 => 메서드 중심(기능)이냐 ? 데이터 중심이냐? 관점을 파악해라

클래스 문법 => 메서드를 분류하는지? 사용자 데이터 타입 설계하는지? 에 따라 접근 방법이 달라진다.

무엇이 중점인지 모르니까 코드 해석할 때 감이 안온다.

BoardHandler 객체 사용해
- 객체지향의 대가들은 마치 사람인듯이 코드를 읽는다. 소설쓰듯이
- 야야 BoardHandler! 배열이랑 size 준비해놓았으니까 사용해서 처리해
- 코드를 코드로 바라보지 마라.
  • 인스턴스 메서드에서 파라미터 없는데 어떻게 주소 받아 ? - 내부에 this 있다.

  • 실무에서는 instance 변수, instance 메서드를 사용한다. (확장성)

[실수한점]

  1. add 부분 ProjectHandler에서 projectHandler.add(memberHandler);부분에서
    main()에 있는 memberHandler를 쓰지 않고 ProjectHandler에서 새로 new로 만들었다.
    그 결과 exist의 값이 호환되지 않았다.

결국 새로만들면 새로운 주소가 들어간다. 하지만 우리는 exist를 통해 기존에 등록된 인원과 비교를 하기 위함이다.
그래서 새로 만드는 것이아닌 app에 있는 원래 있는 주소를 파라미터로 넘겨줘야한다.

언제든지 데이터를 넘기면 된다. 주소를!

만약 멤버를 2그룹으로 나누고 그에 따라 관리자를 부여하고 싶다면(두 그룹 모두 or 한 그룹만)
projectHandler에 넘겨줄때 파라미터로 exist()를 사용해서 호출하고 싶은 그룹의 주소를 넘겨줘야한다.

왜냐하면 exist()는 MemberHandler에 있기 때문에 MemberHandler에 있는 메서드를 사용하고 싶으면 주소가 필요함

만약에 여러군데서 쓸거면 따로 인스턴스로 뺸다. (수정 삭제 조회 등등)

  • 메서드를 실행하는데 데이터가 필요하면 파라미터로 받아

  • 유사 코드를 익숙해질떄까지 반복

  • String.format는 리턴 vs printf는 출력

    • String title = Prompt.inputString(String.format("제목(%s)? ", board.title));

'TIL' 카테고리의 다른 글

🚀 bitcamp TIL (21.07.23)  (0) 2021.07.23
🚀 bitcamp TIL (21.07.22)  (0) 2021.07.22
🚀 bitcamp TIL (21.07.20)  (0) 2021.07.20
🚀 bitcamp TIL (21.07.19)  (0) 2021.07.19
🚀 bitcamp TIL (21.07.16)  (0) 2021.07.16