[TIL] Today I Lerned - 221228

2022. 12. 28. 21:13기록/TIL

[TIL] Today I Lerned - 221228

 

221228 기록

 

알고리즘

 

[Python] 프로그래머스 lv2 - JadenCase 문자열 만들기 (tistory.com)

 

[Python] 프로그래머스 lv2 - JadenCase 문자열 만들기

[Python] 프로그래머스 lv2 - JadenCase 문자열 만들기 코딩테스트 연습 - JadenCase 문자열 만들기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭.

skyriv312079.tistory.com

 

주어진 문자열을 리스트로 변환하여 만들기. 이때 문제에서의 조건은 단어의 시작하는 문자가 영어일 경우 대문자 변환,

이때 대문자 변환이라는 점에서 초점이 잡혀서 고생을 함, 특히 여러개의 공백이 존재하는 경우 공백을 기준으로 단어를 리스트로 변환하였기에 공백 처리과정에서 한참을 해맸다. 

답은 문제를 조금 다르게 접근. 공백 다음에는 어차피 대문자가 와야하니 문자열 자체를 리스트로 만들고 해당 과정에서 공백이 등장하면 공백의 다음 문자를 대문자로 만들면서 접근하기.

 

알고리즘 문제의 경우 초점을 어디에 두느냐에 따라 코드와 풀이방식의 변화가 생긴다. 만약 내가 단어의 시작이란 부분에 계속 초점이 잡혀있었으면 단어를 변환하고 또 공백의 갯수까지 신경을 쓰면서 코드를 작성해야했다. 다만 초점을 공백으로 두는 순간 문제는 단순하게 바뀌어버린다. 공백의 다음이 영어가 온다면 이제 그 부분만 대문자로 바꾸면 되는 것이다. 

이처럼 알고리즘 문제를 풀때는 하나의 초점에서만 생각하지말고 여러 관점에서 생각하도록 해야겠다.

 

리팩토링

 

  • 조회 / 수정 / 삭제
    • 관리자 / 사용자의 등급에 따라서 로직이 달라지도록 설계 완료
  • user와 post를 탐색하는 메서드가 줄이 길어지기에 일단 user 부분만 짧게 메서드를 추출해서 사용
  • exist 와 find의 차이를 이용
    • exist의 경우 해당 데이터베이스에서 찾고자 한 값이 존재 시 그자리에서 stop
    • find의 경우 원하는 원소를 찾은 후에도 끝까지 순회
    • 단순히 해당 엔티티의 유무를 따지는 경우 find에서 exist방식으로 변경
      • post 변경완료 / comment의 경우 해당 엔티티는 변경해야할지말지 고민중
  • JsonBackReference & JsonManagedReference
    • 순환 참조 : 서로 다른 필드가 서로를 참조할 때 끊임없이 물고 늘어지는 것
    • A는 B를 B는 A를,, A←B←A 무한루프
    • 순환참조는 Spring에서 객체끼리도 그리고 데이터 베이스에서 테이블끼리도 발생
    • 데이터베이스의 테이블을 설계하면서 양방향으로 지정해줄때 해당 경우가 발생 한다. 
    • 해당 어노테이션은 양방향 관계에서 직렬화를 설정하여 순환참조를 해결할 수 있도록 설계된 어노테이션
    • JsonBackReference
      • 연관관계의 주인 Entity에 선언, 1:N의 경우 1에 해당하는 부분에 선언한다
      • 직렬화가 되지 않도록 수행
    • JsonManagedReference
      • Managed에서 알수 있듯이 관리되는 부분에 선언
      • 연관관계에서 주인의 반대편에 선언을 한다. 1:N의 경우 N인 쪽에 선언
      • 정상적으로 직렬화가 될 수 있도록 작업
    • 해당 어노테이션을 순환 참조를 해결하였지만 추후에 DTO 방식으로 바꿨기에 해당 어노테이션 제거
    • DTO
      • Entity를 통해 service등의 작업에 접근하는 것이 아닌 Request / Response를 통해 접근하도록 변경을 하였기에 위에 등장한 어노테이션의 불필요로 제거
    • Security
      • 무슨 원리로 접근이 되는건지 파악이 쉽지않다.
      • 적용을 하려고 하지만 실제로 어떤 기능을 이용해야하는지 잘 모르겠다.
      • 심화 과제의 경우 좋아요 기능과 시큐리티 기능을 넣는것이기에 내일까지 시큐리티를 적용해보려고 한다.

 

'기록 > TIL' 카테고리의 다른 글

[TIL] Today I Lerned - 221230  (0) 2022.12.30
[TIL] Today I Lerned - 221229  (0) 2022.12.30
[TIL] Today I Lerned - 221227  (0) 2022.12.27
[TIL] Today I Lerned - 221226  (0) 2022.12.26
[TIL] Today I Lerned - 221223  (0) 2022.12.23