TIL 22.12.22

쓰옹·2022년 12월 22일
0

개발자를 향해~~TIL✍

목록 보기
46/87
post-thumbnail

TODAY

  • 프로그래머스 알고리즘 문제 풀었업
  • TIL특강이 있었지
  • BLOG에 숙련과제 LV2 진행

프로그래머스 알고리즘 문제

  • 삼항연산자에 += 사용

    • 내가 적은 답은
      if (num == n) {
           count += 1;
         // count++;의 방법도 있다
       }
      이건데 다른 사람 정답을 보니까 answer += num==n ? 1 : 0; 삼항연산자를 사용해서 이렇게 간단하게 작성했더랍
  • for문에서 for(int i = 0; i < 10; i++){} 에서 i가 하나씩 증가되는게 아니라 두개 씩 증가되길 원해서 i+2 이렇게 적었는데 에러가 떴다..ㅎ 그래서 알아보니 i+=2 이거임

  • 위에 삼항연산자를 알게되고 바로 다음 문제에 적용해서 풀었다.
    (프로그래머스 머쓱이보다 키 큰 사람)

    	public class TallerThan {
    	    public int solution(int[] array, int height) {
    		    int count = 0;
    	        for (int others : array){
    	            count += (others>height) ? 1 : 0;  // 중복된 숫자에서 본거 바로 써먹기!
    	        }return count;
    	    }
    	}

TIL 특강

문시해알

  1. 어떤 문제
  2. 시도해본 것
    1. 답이 하나만 있는 게 아니기 때문에
    2. 시행착오는 정말 중요한 자산
  3. 어떻게 해결했는지
  4. 뭘 새롭게 알았는지
  • originality가 필요 나만 작성할 수 있는 티아엘 그럴려면 이 중요!

  • 예쁜 미사여구 반짝반짝 필요 없음 → 핵심(문시해알)만!
  • 통째로 붙여 넣은 코드
  • 감성갬성 글
  • 강의노트 복붙 혹은 요약

요즘 약간 헤이해져서 일기만 쓰고 있었는데.. 반성한다.
열심히 쓰자 티아엘


댓글생성기능

댓글을 생성하는 로직을 만들고 포스트맨에서 확인을 했는데 댓글 생성이 안되고 에러가 발생했다.

  • 첫 번째 에러
    ...
    Cannot construct instance of com.sparta.blog.dto.CommentRequestDto (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
    ...

그래서 dto에 기본생성자를 만들어줬는데 또 에러가...

  • 두 번째 에러
    ...
    java.lang.NullPointerException: Cannot invoke "com.sparta.blog.repository.BlogRepository.findById(Object)" because "this.blogRepository" is null] with root cause
    java.lang.NullPointerException: Cannot invoke "com.sparta.blog.repository.BlogRepository.findById(Object)" because "this.blogRepository" is null
    ,,,

레파지토리에 저장이 안되는 것! 눈을 씻고 찾아보니
서비스 필드에 선언한 레파지토리의 생성자가 없었다.
접근제어자도.. 그래서 NullPointerException이,,
그래서 접근제어자를 넣어주고 생성자도 만들어주는 애노테이션도 추가했다. +final

@Service
@RequiredArgsConstructor
public class CommentService {

    private final CommentRepository commentRepository;
    private final BlogRepository blogRepository;
    
    ...

주의깊게 코드를 짰으면 이런 에러도 발생하지 않았을텐데..
다음부턴 더욱 생각하면서 짜자자자잦

!!!

에러에 대해 고민하다가 생성자.. DI, final로 의식이 흘러갔다.
간단하게 정리하자

  • final
    • final변수는 상수를 의미한다.
    • 따라서 생성자를 통해 초기화를 해야 사용할 수 있다.
  • DI (Dependency Injection)
    • 의존관계 주입이라고도 한다

    • 강하게 결합된 클래스를 분리한다.

    • 외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴으로, 인터페이스를 사이에 둬서 클래스 레벨에서는 의존관계가 고정되지 않도록 하고 런타임 시에 관계를 동적으로 주입하여 유연성을 확보하고 결합도를 낮출 수 있게 해준다.

    • 주입 방법

      • 그 중 하나가 생성자를 통해서 의존관계를 주입하는 것

        • 다른 방법과 다르게 필드 객체에 final 예약어를 사용할 수 있고 컴파일 시점에 누락된 의존성을 확인할 수 있다.

    자세한 내용은 https://mangkyu.tistory.com/150 참고

profile
기록하자기록해!

0개의 댓글