231115CW
오늘도 어김없이 밤시간 까지 열심히 Spring 공부를 하던 와중이었다.
상품을 저장하는 웹페이지를 구현하려 API를 작성 중 이었는데, 어느 순간 거슬리는 상황이 발생했다.
상품을 모두 조회하는 API를 작성 중이었는데, return값으로 productService를 주려는 중이었다.
VSCode와 마찬가지로 IntelliJ또한 여러 단축키, 자동완성 등 편리한 기능들을 지니고 있는데, 이번에도 “그렇지 착한녀석.” 하면서 Enter를 탁 쳤다.
이젠 빨간줄 뜬다고 무조건 쫄진 않는다. 훗.
해당 productService Class에 메서드 생성을 위해 Alt+Enter를 탁탁!
그런데 어,
예상키론, 제일 하단에 얌전히 뜩, 하고 생성되야 하는데 뭔 자신감인지 필드 바로 아래서 존재감 뿜뿜하는게 아닌가?
??? 하면서 Ctrl + Z, Alt + Enter 연달아 치느라 10분 가량 시간이 흘렀다.
그리고 늘 지금까지 늘 그랬듯, 사소한 차이로 발생한 일이었다.
사실 처음부터 productService 라고 “굵은이탤릭”효과로 강조를 했는데, 'p'roductService가 아닌 'P'roductService로 작성한 차이였다.
아 그랬군, 하고 당시에 그냥 넘어가기에 스스로 안타깝기 짝이 없었던게, 그래서 둘 다 Method는 잘 생성이 되는데 뭔 차이인지를 모르겠던 것.
솔직히 스스로 창피해서 검색을 해봤는데, 결과는 이러하다.
return productService.getAllProducts(); 와 return ProductService.getAllProducts();의 주요 차이점은 변수명의 소문자 'p'와 대문자 'P'에 있다.
1. 소문자 'p'를 사용한 경우: (본래 의도하고 있었던 것)
return productService.getAllProducts();
이 코드에서 'productService'는 변수 또는 필드로 가정된다.
즉, 어딘가에 선언된 'ProductService'의 객체를 참조하고 해당 객체의 getAllProducts() 메서드를 호출한 결과를 반환하는 것이다.
2. 대문자 'P'를 사용한 경우: (이번 사건의 발단)
return ProductService.getAllProducts();
여기에서의 'ProductService'는 클래스 또는 인터페이스로 가정된다.
즉, 'ProductService'라는 클래스 또는 인터페이스의 getAllProducts() 메서드를 호출한 결과를 반환하는 것.
또한 'ProductService'는 클래스인지, 인터페이스인지에 따라 사용 방법이 달라지기도 한다.
정리하자면, 소문자로 시작하는 것은 주로 객체 또는 인스턴스를 나타내며, 대문자로 시작하는 것은 클래스 또는 타입을 나타낸다. 따라서 변수명과 클래스/인터페이스명을 구분하여 사용하는 것이 좋다고 한다.
사실 기본적인 부분이다.
당장 예시를 들어봐도
public class WhatAreYouDoing {
public String iDontKnowWhatIsHappening = "오메 헷갈린거";
}
클래스 'WhatAreYouDoing' 이랑 변수 'iDontKnowWhatYouTalkingAbout' 라는 건 그냥 보이지 않는가?
하여간 이번에도 큰 일은 아니었지만, 오타 하나라도 줄이자면 이런 기회에 한 번 더 리마인딩 하면 좋겠다.
어휴 진짜 미세미세한 오타 때문에 10분에서 많게는 30분정도 까먹은 적이 한 두 번이 아니다;
그래서 작성 할 때 최대한 눈 땡글땡글 뜨려고 노력 중이다.(힘들지만)
어쨋건 이번에도,
@GetMapping("/admin/products")
public List<ProductResponseDto> getAllProducts(){
return productService.getAllProducts();
}
마지막은 역시 해피엔딩.
'문법 > JAVA' 카테고리의 다른 글
Entity…나는 응답한다…! (1) | 2023.12.08 |
---|---|
저 객체가 그 객체요? ??? (0) | 2023.10.26 |
클래스와 아이들 (0) | 2023.10.23 |
상속 (0) | 2023.10.21 |
스레드와 스레드, 그리고 스레드. (1) | 2023.10.19 |