TIL 210603

박수빈·2021년 6월 3일
0

TIL

목록 보기
1/25

헷 사람들 TIL이라고 쓰니까 나도 TIL해야지 약간
공부영상. 이라고 안하고 스윗미라고 하는 그런 너낌😝😝

✔ 오늘 한 일

✅ 알고리즘 스터디 실버3 2문제 풀기
✅ 인프런 스프링부트 강의 2개 듣기


✔ 백준

9613

최대공약수를 구하는 문제였다.
1. 그냥 부딪히셔 n보다 작은 수로 다 나누면서 약수를 구하고, 교집합을 통해 공약수를 구했다. 당연히 시간초과
2. n//2까지만 나누면서 i와 n//i까지 한번에 약수 리스트에 넣어줬다. 약수구하는 시간을 절반으로 줄여서 통과.
3. 하지만 이것은 유클리드 호제법 문제지...ㅎㅎㅎㅎㅎ 잠시 에라토스테네스의 체와 헷갈렸는데, 그건 소수 구하는 법이고, 약수는 유클리드 호제법

유클리드 호제법

def gcd(a,b):
	while b != 0:
    	d = a%b
        a,b = b,d
    return a

이렇게 최대공약수를 구한다. 핵심은 a를 b로 나눈 나머지(d)와 b의 최대공약수가 a와 b의 최대공약수라는 점이다.
증명은

이렇게.. 사실 깔끔하게 알겠지는 않다. 유클리드 호제법이나 에라토스테네스의 체는 코테 앞두고 다시 봐줘야 하는 그런 녀석들,,

2512

예산이 있고, 원하는 금액씩 나눠주지만, 너무 큰 가격이라면 상한가를 줘야하는 그런 문제였다.
단순이 브루트포스로 모든 경우를 검사했다. 아니 근데 이거 이분탐색이네 ㅋㅋㅋㅋ 아니 당연하지.....하아... 내일 이분탐색으로 다시 풀어봐야겠다.


✔ 스프링 부트

스프링 빈과 의존관계

컴포넌트 스캔과 자동 의존관계 설정

@Controller 어노테이션이 붙어있으면, 스프링이 시작될 때, 해당 오브젝트를 자동으로 생성한다.
@Autowired 어노테이션을 생성자에 붙여서, 자동으로 service와 연결되게끔 한다. 그냥 하면 빨간줄 뜨고, service에도 @Service 어노테이션을 걸어줘야, 스프링이 자동으로 연결 wire을 해준다.

리포지토리도 어노테이션 해준당!

서비스, 컨트롤러, 리포지토리가 스프링에서 흔한 기본 구성!
스프링 빈에 등록되어있는 service를 넣어주는 것으로, dependncy injection이라고 한다👌

컴포넌트 스캔

  • 컴포넌트 @Component@Controller, @Service, @Repository를 포함한다.
  • 컴포넌트는 자동으로 스프링 빈으로 자동 등록된다. (싱글톤으로! 하나만 등록되어 공유함)
  • main 함수가 들어있는 패키지 하위가 스캔 범위

자바 코드로 직접 스프링 빈 등록하기

SpringConfig.java

SpringConfig.java 파일을 메인함수와 같은 위치에 생성한다. @Configuration 어노테이션을 달아준다.
이렇게 설정하면 @AutoWired 어노테이션 없이도 연결이 된당!
memberRepository는 인터페이스이기 때문에 new를 할 수 없다. 생성하는 빈은 인터페이스로 해주고, 리턴은 실제 구현체로 한다! (인터페이스가 익숙하지 않아서 쪼끔 어색하닿,,)

의존성 주입

Dependency Inejection에는 대표적으로 3가지 방법이 있다: 생성자 주입, setter 주입, 필드 주입.
지금 사용하는건 주로 생성자 주입.
setter를 사용할 경우 아무나 메소드 접근이 가능한데, 의존성은 처음 시작될 때만 주입되면 되는거니까.

  • 일반적인 경우(컨트롤러, 리포지토리, 서비스)는 컴포넌트 스캔을 이용하고, 차후 변경이 필요하거나, 일반적이 지 않은 경우 config를 이용해 등록한다.

회원 관리 예제 - 웹 MVC 개발

회원 웹 기능 - 홈 화면 추가

홈 컨트롤러를 생성해줬다. 주소가 '/'로 되어있기 때문에, 기본 주소로 들어갔을 때 뜬다.
우선순위가 1. 스프링 컨테이너 2. static 파일 이기 때문에, HomeController로 인한 home.htmlindex.html보다 먼저 찾아져 연결 된다.

회원 웹 기능 - 등록

멤버 컨트롤러에 @PostMapping 어노테이션을 이용해, /members/new로 http post가 넘어올 경우, 이 함수가 실행된다. 임시로 form 클래스를 만들어 뒀는데, post가 매핑 될 때 필드값이 채워져서 넘어온다. 근데 그럼 member.setName은 왜 또하는거지?
디비에 저장해주고, redirect:/으로 리턴하면, 홈으로 돌아가게 된다!

html form은 이렇게 생겼다. 버튼이 눌러졌을 때, form의 action의 주소로 post되어 보내지는 방식이다.

회원 웹 기능 - 조회

서비스에 만들어둔 메소드로 전체를 긁어와서, addAttribute로 뷰에 넘겨준다.

thymeleaf의 문법. for문 돌아서

이렇게 반복해준다.
members.id 로 필드값 접근 같지만, 타임리프가 getter접근으로 바꿔서 해줌.


꼼지락🐥

문득 진짜 개발자 같아서 캡쳐떠봤다...

profile
개발자가 되고 싶은 학부생의 꼼지락 기록

0개의 댓글