본문 바로가기
  • 시 쓰는 개발자

전체 글176

Controller vs RestController @Controller @Controller는 보통 Spring MVC 패턴에서 view를 반환할 때 사용된다. home.html같이 view를 반환할 때는 Controller를 써도 되지만, 데이터를 반환한다면 Controller만으로는 부족하다. 그래서 필요한 것이 바로 @ResponseBody이다. 이것과 Controller를 함께 달아주면 데이터를 반환할 수 있다. 다만, 이 두개를 합쳐놓은 것이 RestController이다. @RestController (= @ResponseBody + @Controller) Controller와 ResponseBody를 합쳐놓은 것이 RestController이다. 그렇기때문에 @ResponseBody라는 어노테이션 없이도 @RestController만으로도 .. 2024. 3. 9.
RequestBody, ResponseBody @RequestBody , @ResponseBody 클라이언트가 서버로 요청을 보내는 경우 RequestBody를, 서버가 클라이언트로 응답을 보낼 때는 ResponseBody를 사용한다. 이때 객체를 반환시 자동으로 JSON변환 되어 반환된다. 클라이언트 → 서버 (RequestBody) @RequestBody을 써서 요청 데이터를 서버로 보내면, HTTP 바디 부분에 있는 내용들을 java객체로 변환시켜서 객체로 저장한다. 서버 → 클라이언트 (ResponseBody) @ResponseBody을 써서 응답 데이터를 클라이언트로 보내면, 데이터를 객체로 변환하여 HTTP 바디 부분에 넣으면서 클라이언트로 전송한다. HttpMessageConverter 이렇게 뷰가 아니라 객체를 반환하기 때문에 view.. 2024. 3. 8.
Bean에 대하여 IoC 글에서 이미 썼던 내용이지만, Bean에 대한 내용만 따로 쓰고싶었고, 그중에서도 자주 들여다볼 내용만 따로 추려냈다. Bean에 대한 내용들을 더 추가해보려 한다. Bean 빈 : 스프링 컨테이너(IoC컨테이너)가 관리하는 객체 빈 팩토리 : 빈들을 관리하는 컨테이너 컨테이너 : 객체들이 담긴 공간을 의미한다. 객체의 생명주기를 관리하여 개발자는 로직에만 집중할 수 있게 도와준다. 왜 Bean으로 등록할까? Bean은 IoC컨테이너가 관리하는 객체이다. 객체별로 빈인 객체도 있고, 빈이 아닌 객체도 있을 것이다. 단순히 객체를 만들었다고 해서 다 빈은 아니라는 것이다. 스프링이 말하는 Bean이란, ApplicationContext가 "알고있는" 객체이다. 그리고 위에서 언급했듯이 그러한 빈끼리.. 2024. 3. 8.
헷갈리는 문법 정리 (3) - ord, join 1. 문자열 끝에 문자 추가 문자열은 append를 못쓴다! 그러므로 문자를 추가할 때 + 혹은 join을 사용해서 더해줘야한다. 2. 문자열 ord로 다루기 ord("a")라고 하면 97을 의미 ord("a") + 1 은 98이므로 chr(ord("a") + 1)은 b를 의미한다. (아스키코드 A = 65 , a = 97) 3. math.gcd math.lcm gcd 최대공약수 , lcm 최소공배수 (추가하기) 2024. 3. 7.
리스트 복사 하는 방법 1. 슬라이싱으로 복사 >>> list1 = [1, 2, 3, 4] >>> list2 = list1[:] 슬라이싱에서 시작점과 끝점을 생략하면 리스트의 모든 요소를 의미한다. 2. list()로 묶기 >>> list1 = [1, 2, 3, 4] >>> list2 = list(list1) 복사하고자하는 리스트를 list()로 감싸고 새롭게 리스트 객체를 선언해주면 된다. 3. copy 메소드 - (추천) >>> list1 = [1, 2, 3, 4] >>> list2 = list1.copy() 가장 가독성이 좋은 방법이라 추천하는 방법이다. 참고로 copy는 시간복잡도가 O(n)이다. 4. 리스트 연산 >>> list1 = [1, 2, 3, 4] >>> list2 = [] + list1 빈 리스트를 하나 써.. 2024. 3. 7.
파이썬 슬라이싱 슬라이싱 파이썬 slicing은 "iterable한 객체" 모두를 다룰 수 있다. 따라서 리스트, 튜플, 문자열 같은 것들을 다룰 수 있다. 1. 구조 : a[start : end : step] start: 슬라이싱 시작위치. 주의할 것은 이때 start가 의미하는 것은 index번호이다. 따라서 a[3:5]면 3번째 숫자부터 자르는 것이 아니라, 인덱스 3부터 가져오는 것이므로 실제로는 4번째 숫자부터 슬라이싱을 한다. end: 슬라이싱이 끝나는 위치인데, for문의 range처럼 end는 포함하지 않기 때문에 슬라이싱은 end-1까지 잘라짐 step: 몇개씩 끊어서 가져올지, 그리고 방향을 정한다. ex1. start부터 끝까지 가져오기 a[start:] ex2. 맨 처음부터 end-1까지 가져오기 .. 2024. 3. 7.
dictionary에서 key 다루기 dictionary에서 특정 key 찾기 : key in dict 딕셔너리에 특정한 key가 있는지 확인할 때 그냥 in 을 사용한다. 'a' in dict라고 하면 dict의 key들이랑 비교한다. 이때 return값은 True이거나 False이다. dictionary = { 2: 1, 3: 4, 5: 2, 1: 3, 4: 1} print(1 in dictionary) # True print(5 in dictionary) # True print(10 in dictionary) # False print('a' in dictionary) # False dictionary에서 특정 key에 매칭되는 value 찾기 : dict.get(key) get() 메소드에 key값을 넘겨주면 해당 key값의 value.. 2024. 3. 7.
2차원 리스트 정렬하기 2차원 list 정렬 기본적으로는 정렬은 lambda를 사용해서 정렬을 한다. 그러나 2차원 배열 lst에 대해 lst.sort()라고 하면, lambda를 안써도 디폴트로 x좌표에 대해 오름차순 정렬하고, 값이 같으면 y좌표에 대해 다시 오름차순으로 정렬해준다. Ex. 이런식으로 2차원 리스트 있다고 가정. [ [2, 1], [3, 4], [1, 2], [1, 3], [3, 2] ] 결과적으로 저 5개 덩어리는 각각이 한몸이라 x기준으로 정렬하든 y기준으로 정렬하든 같이 움직임. array.sort(key=lambda x : x[0]) # x좌표 기준으로 정렬, y좌표 그대로 둠 array.sort(key=lambda x : x[1]) # y좌표 기준으로 정렬, x좌표 그대로 둠 array.sort(k.. 2024. 3. 7.
문자열 replace 파이썬 replace 문자열에서 replace('바꿀 문자', '이거로 바꿈', 변경 반복횟수) 라고 하면 문자열 내에서 일부를 통째로 원하는 문자로 변경 가능. 이거로 단어 개수 세거나 문자 길이를 늘리고 줄이고 할 수 있음. 변경 반복 횟수는 기본적으로 문자열 전체를 다루도록 설정되어있다. str = "oxoxoxox" star_string = str.replace("ox", "*") strange_string = str.replace("ox", "*", 1) # 반복횟수가 1번이라서 앞에 한번만 변경된다. print(star_string) print(strange_string) [출력] **** *oxoxox ※ 주의사항 참고로, 문자열 내에서 특정 문자끼리 위치를 서로 바꾸고 싶을때는 replac.. 2024. 3. 7.