인프런 커뮤니티 질문&답변

zzzzz님의 프로필 이미지
zzzzz

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

실전 예제 1 - 요구사항 분석과 기본 매핑 질문있습니다.

작성

·

195

·

수정됨

0

1.7분에서 setter 보다 유지보수 때문에 생성자를 쓰는데 이유 좀 자세하게 알수 있나요?

2.9분 53초에서 뒤에 사용될 명령어 나오게 하는 단축키 뭔가요?

3.10분 45초에 @Table(name="Orders")//Orders로 한 이유가 에약어로 order은 orderby로 인식된다.(db마다 다름) 가 맞나요?

4.14분 10초처럼 아래 문구를 어떻게

public void setStockQuantity(int stockQuantity) {

this.stockQuantity = stockQuantity;

}

public void setStockQuantity(int stockQuantity) {this.stockQuantity = stockQuantity;} 이렇게 바꾸나요?

 5. 왼쪽화면은 제화면이고 오른쪽 화면은 강의 화면입니다. 빨간색 네모박스처럼 상위 폴더 하위 폴더가 안나뉘어집니다. 이렇게 어떻게 해야 하나요?

시도한 방법:

jpabook.jpashop.domain1 을

domain1 이렇게 리팩터 시도를 하면 활성화가 안됩니다.

답변 3

1

안녕하세요

1번 질문에 대해서 이미 충분한 답변해주셨으나 제 경험을 조금 말씀드리자면

객체는 여러 메소드를 거쳐서 사용되는 경우가 많은데, Setter와 같이 객체의 상태를 변경하는 메소드가 열려있으면 어디서 이 객체가 변경되었는지 추적하기가 어려워, 유지보수가 힘들어졌던 경우가 있었습니다. 다시 말하면 객체의 불변성(객체가 중간에 값이 바뀌지는 않았는지)이 보장되지 않아 어려움을 겪었었습니다.

복잡한 시스템에서 내가 오래전에 작성한 로직이거나, 다른 사람과 협업하여 개발한 경우에 로직 중간에 어디서든 Setter 메소드가 호출되어 값이 변할 수도 있기 때문에 객체의 상태를 예측하기가 어려워집니다.

    public void doSomething(Member member) {
        executeSomething(member);
        performSomething(member);
        processSomething(member);
        handleSomething(member);
        updateSomething(member);
        calculateSomething(member);
        generateSomething(member);
        // 이 시점에서 Member의 필드가 처음과 같다고 보장할 수 없습니다.
    }

 

2. IntelliJ의 코드 완성(code completion) 기능으로 ctrl + space(Command + space)로 사용하실 수 있습니다. 만약 코드 문맥에서 타입 정보까지 고려하여 보려면 ctrl + shift + space(Command + shift + space)를 사용하시면 됩니다.

4. IntelliJ의 코드 접기(Code folding) 기능으로 ctrl + '-'(Commang + '-') 로 접고 ctrl + '+'(Command + '+')로 펼칠 수 있습니다. 혹은 아래와 같이 버튼으로 접었다 폈다 할 수도 있습니다.

image

셋팅에서 아래와 같이 메소드 바디가 한 줄일 때 자동으로 접히도록 설정할 수도 있습니다.
image

1

안녕하세요. ekek님, 공식 서포터즈 y2gcoder입니다.

  1. 다음 링크(클릭) 가 개인적으로 공감가는 이유들을 잘 설명해주고 있어서 소개해드립니다. 덧붙이자면 setter를 사용하기가 너무 쉽기 때문에 어느 곳이든 쓸 수 있게 되면서 사실상 캡슐화가 깨지는 점 때문에 setter를 사용하지 않으려고 합니다! 물론 setter를 필요할 때만 쓰는 것은 괜찮다고 생각합니다 :)

  2. 이부분은 현재 인텔리제이 버전(2023.3.x)에서는 바로 보이지는 않는 것 같습니다! 저는 cmd+p 혹은 control+p 등을 부르면 힌트가 나오는데 이를 통해 입력하는 방식을 많이 사용하고 있습니다! 아시는 분 계시면 말씀해주십쇼!

  3. 맞습니다. 보통 DB에서 Order는 order by 등으로 많이 쓰이는 예약어이기 때문에 다른 테이블명으로 바꿔줬습니다!

  4. 이 부분은 영한님이 단축어를 눌러 바꾸셨다기보단 인텔리제이에서 일부러 축약해서 보여주는 기능인 것 같습니다. 옆에 라인 번호를 보시면 라인은 그대로입니다! 아마 저 상태에서 getId 등에 커서를 옮겨 고치려고 하면 원래 코드대로 보여줄 것입니다! 요즘 버전(2023.3.1)에서는 저렇게 축약해서 보여주지 않는 것 같습니다 ㅜ

  5. 보기 옵션을 변경하시면 좋겠습니다! Options(점 세개) > Tree Appearance > Compact Middle Packages 를 체크 해제 해보시겠습니까?

    image

 

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

ekek님의 질문에 대한 답변을 찾아드리겠습니다.

  1. 생성자를 사용하는 이유와 관련하여, 강사님이 직접 답변하신 내용이 있는 게시글을 참고해 주세요.
  1. 단축키 사용에 대한 언급도 같은 링크에서 확인하실 수 있습니다.

  2. @Table 어노테이션 사용과 관련된 내용은 답변된 내용 중 확인하기 어려웠습니다. 해당 내용은 강의 자료나 추가적인 자료를 참고하시는 것이 좋을 것 같습니다.

  3. 코드 한 줄로 작성하는 방법에 대한 구체적인 답변은 찾지 못했습니다. 이 부분은 IDE의 코드 포매팅 기능을 참고하시거나 관련 질문을 게시판에 올려보시길 권장드립니다.

도움이 되셨길 바라며, 강의 수강에 행운이 함께하시길 바랍니다!

zzzzz님의 프로필 이미지
zzzzz

작성한 질문수

질문하기