TIL 23.01.03

쓰옹·2023년 1월 3일
0

개발자를 향해~~TIL✍

목록 보기
56/87

TODAY


  • 알고리즘 풀기풀기
  • 팀프로젝트
    • 좋아요 한 유저도 조회할 수 있게 기능 구현
    • 깃허브 헤매기


알고리즘


문제 푼 거 깃허브 링크 랍니다

  • 문자열 반복하는 방법

    • // for문 사용
         for (int i = 0; i < my_string.length(); i++) {
             System.out.print(my_string.charAt(i));
         }

      이렇게 되면 my_sring 의 문자 하나하나 찍힌다. -> charAt()

    • // 문자열을 `char[]` 어레이로 변환
          char[] chars = my_string.toCharArray();
      
          // 향상된 for 루프를 사용하여 `char[]` 어레이을 반복합니다.
          for (char ch: chars) {
              System.out.print(ch);
          }

      이러면 my_string의 문자 하나하나가 요소로 배열에 저장됨 -> toCharArray()

  • StringBuilder

    • Stirng은 변경 불가능한 문자열을 생성하지만 StringBuilder는 변경 가능한 문자열을 만들어 주기 때문에, String을 합치는 작업 시 하나의 대안이 될 수 있음
    • 기존 데이터에 더하는 방식 -> 속도도 빠르고 상대적으로 부하가 적음
      • 긴 문자열을 더하는 상황의 경우 사용하면 좋음
    • 사용법
      public class Main{
      	public static void main(String[] args) {
         		StringBuilder stringBuilder = new StringBuilder();
              stringBuilder.append("문자열 ").append("연결");
             // String str = stringBuilder;
             // String에 StringBuilder를 그대로 넣을 순 없다. toString()을 붙여야 한다
              String str = stringBuilder.toString();
             // 두 println()은 같은 값을 출력한다
              System.out.println(stringBuilder);
              System.out.println(str);
         }	
      }
      StringBuilder 인스턴스에 append로 붙여
  • repeat()

    • String 메서드 중 하나로 String 문자열을 파라미터의 주어진 횟수만큼 반복
    • 이번 자바11에서 새로 추가된 String 메서드
    • 파라미터를 0으로 지정하면 빈 문자열 반환
    • 파라미터를 음수로 지정하면 IllegalArgumentExceptionthrow 에러를 반환
    • 파라미터를 1로 지정하면 문자열을 그대로 반환합니다
    • 내부적으로 Arrays.fill()System.arraycopy()메서드를 호출 하여 새 문자열 만듦
    • 더 많은 정보는 요기로
      https://codingdog.tistory.com/entry/java-string-repeat-메서드로-쉽게-문자열을-반복해-봅시다


팀프로젝트


게시글 조회 시 좋아요를 한 사용자도 같이 조회 할 수 있게...

처음에 그냥 postResponseDto에 뭐 어떻게 했더라..
postLike의 리스트를 멤버변수로 넣고 거기서 username을 빼왔던가 그렇게 했는데 역시나

{
    "timestamp": "2023-01-03T06:25:04.251+00:00",
    "status": 500,
    "error": "Internal Server Error",
    "trace": "java.lang.NullPointerException: Cannot invoke \"java.util.List.add(Object)\" because \"this.likedUsers\" is null\n\tat com.sparta.blog.dto.response.PostResponseDto.<init>(PostResponseDto.java:45)\n\tat com.sparta.blog.service.PostService.getAllBlogs(PostService.java:46)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat ...",
    "message": "Cannot invoke \"java.util.List.add(Object)\" because \"this.likedUsers\" is null",
    "path": "/api/posts"
}
2023-01-03T15:25:04.237+09:00 ERROR 14617 --- [nio-8080-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.NullPointerException: Cannot invoke "java.util.List.add(Object)" because "this.likedUsers" is null] with root cause

java.lang.NullPointerException: Cannot invoke "java.util.List.add(Object)" because "this.likedUsers" is null
	at com.sparta.blog.dto.response.PostResponseDto.<init>(PostResponseDto.java:45) ~[main/:na]
	at com.sparta.blog.service.PostService.getAllBlogs(PostService.java:46) ~[main/:na]
...

dto 만들어서 하니까 아주 잘 되더라구요 comment 넣은 거처럼..ㅎㅎ

깃허브..어려워

좋아요 기능을 만든 상태에서 커밋하고 깃허브의 내 브랜치에 푸시를 했는데..
다른 조원분이 스프링시큐리티를 하셔서 그걸 하시고 좋아요 기능을 넣어서 본인 브랜치에 푸시를 하시고.. 나는 그걸 클론을 했는데.. 이제 깃허브 origin의 내 브랜치에 안맞고.. 이렇게 저렿게 에러가..
깃허브를 사용할 때 메인브랜치의 뿌리를 잘 잡고 있어야함 그래서 다시 그 조원분의 브랜치를 메인으로 머지하고 그걸 클론받아서 다시 작업하고 내 브랜치로 나눴다.
디벨롭 브랜치로 작업을 하고 프로젝트가 완성되면 메인으로 합치는 방법으로 하는걸로..
협업할 때 브랜치는 깔끔한게 좋다고 하셨다.
브랜치에서 브랜치가 또 뻗어나오고 이러면 지저분해지니까
뿌리를 잘 어? 해야한다? 어? 느낌 그런 느낌

게터게터..

다시 메인 클론받아서 다시 코드 적는데 잘 되던 코드가 안되는 것이다.

2023-01-03T20:03:17.109+09:00 ERROR 18970 --- [nio-8080-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class com.sparta.blog.dto.response.PostLikeResponseDto]] with root cause

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class com.sparta.blog.dto.response.PostLikeResponseDto and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0]->com.sparta.blog.dto.response.PostResponseDto["likedUsers"]->java.util.ArrayList[0])
	at com.fasterxml.jackson.databind.exc.InvalidDefinitionException.from(InvalidDefinitionException.java:77) ~[jackson-databind-2.14.1.jar:2.14.1]
	at com.fasterxml.jackson.databind.SerializerProvider.reportBadDefinition(SerializerProvider.java:1306) ~[jackson-databind-2.14.1.jar:2.14.1]
	at com.fasterxml.jackson.databind.DatabindContext.reportBadDefinition(DatabindContext.java:408) ~[jackson-databind-2.14.1.jar:2.14.1]
	at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:53) ~[jackson-databind-2.14.1.jar:2.14.1]
	at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:30) ~[jackson-databind-2.14.1.jar:2.14.1]
	at com.fasterxml.jack...

No serializer found for class com.sparta.blog.dto.response.PostLikeResponseDto and no properties discovered to create BeanSerializer (...
예 디티오에 게터를 안해놨습니다.



reference
https://www.techiedelight.com/ko/iterate-over-characters-string-java/
https://onlyfor-me-blog.tistory.com/317
https://hardlearner.tistory.com/288
https://crazykim2.tistory.com/546

profile
기록하자기록해!

0개의 댓글