본문 바로가기

분류 전체보기299

[코딩 테스트] 오름차순 된 리스트 합치기 오름차순 된 리스트 합치기 오름 착순 정렬된 리스트를 합치면 된다 변수 p1, p2를 만들어서 값의 크기를 비교하여 각 리스트의 값을 순차적으로 넣어준다 a = int(input()) n = list(map(int, input().split()) b = int(input()) m = list(map(int, input().split()) p1 = p2 = 0 c=[] while p1 2022. 1. 30.
[코딩 테스트] 무작위 카드 셔플 무작위 카드 셔플하기 무작위 셔플을 하기 전 0~20까지의 값이 들어간 20개의 리스트를 생성한다 각 인덱스에 값으로 셔플할 숫자를 결정한다 a = list(rnage(21)) 값을 순서대로 입력을 받아서 s,e변수에 넣어준다 for 문을 돌려서 셔플은 해준다 이때 0번째 인덱스에 들어간 숫자로 5~10까지의 숫자를 셔플 해줘야 하니 (10-5+1)//2를 범위로 for문을 돌린다 a = list(ragne(21)) #[0,1,2,3,~20] for _ in range(10) : s,e = map(int, input().split()) for i in range((e-s+1)//2) : a[s+i], a[e-i] = a[e-i], a[s+i] for x in a: print(x, end=' ') for .. 2022. 1. 30.
[코딩 테스트] 숫자만 출력 + 약수 구하기 숫자만 출력하여 약수 구하기 파이썬에서 숫자를 출력하기 위해서는 isdigit함수와 isdecimal함수가 있다 isdigit 함수는 숫자 형태는 다 출력하고 isdecimal함수는 0~9까지의 숫자를 출력한다 첫번째로 숫자만 출력하는 알고리즘 구현 s = input() res = 0 for x in s : if x.isdecimal(): res = res * 10 + int(x) print(res) 입력된 값을 가져오는 input() 계산된 숫자를 합치기 위한 변수 res for 문으로 입력된 값을 x에 담음 if x.isdecimal()을 사용하여 0~9까지의 숫자를 담음 준비한 res 변수에 먼저 들어온 숫자부터 *10의 자리 숫자를 부여한다 입력 예시 : dodm2m3 출력 예시 : 23 다음은 .. 2022. 1. 30.
[T.I.L]DAY20 ------------------------------------------------------------ [T.I.L] ------------------------------------------------------------ 2022.01.28 - [개발 개념] - [개발개념] 스프링 MVC VIEW RESOLVER 2022.01.28 - [프로그래밍언어/PYTHON] - [Python] 회문 문자열 [Python] 회문 문자열 N개의 문자열 데이터를 입력받아 앞에서 읽을 때나 뒤에서 읽을 때나 같은 경우이면 YES를 출력하고 아니면 NO를 출력하는 프로그램을 작성한다. 단 회문을 검사할 때 대소문자를 구분하지 않습 yikanghee2.tistory.com 알고리즘 1문제와 스프링 MVC 기본구현.. 2022. 1. 30.
[개발개념] 스프링 MVC VIEW RESOLVER 뷰 리졸버 역할 컨트롤러 처리 결과 후 응답할 VIEW에 전달할 값을 저장 및 전달하는 클래스 BeanNameViewResolver 를 통한 동작 핸들러 어댑터를 통해서 논리 뷰 이름을 획득한다 뷰 이름으로 viewResolver를 순서대로 호출한다 BeanNameViewResolver를 통해 스프링 빈으로 등록된 뷰를 찾는다 view.render()가 호출된다 InternalResourceViewResolver를 통한 동작 핸들러 어댑터를 통해 논리 뷰 이름을 획득한다 뷰 이름으로 viewResolver를 순서대로 호출한다 BeanNameViewResolver를 통해 스프링 빈으로 등록된 뷰를 찾아야 하는데 없다 InternalResourceViewResolver가 호출된다 뷰 리졸버가 Internal.. 2022. 1. 28.
[Python] 회문 문자열 N개의 문자열 데이터를 입력받아 앞에서 읽을 때나 뒤에서 읽을 때나 같은 경우이면 YES를 출력하고 아니면 NO를 출력하는 프로그램을 작성한다. 단 회문을 검사할 때 대소문자를 구분하지 않습니다 n=int(input()) for i in range(n): s=input() s=s.upper() for j in range(size//2): #2 if s[j]!=s[-1-j]: #0 -1 1 -2 print("#%d NO" %(i+1)) break else: print("#%d YES" %(i+1)) 첫번째 방법은 FOR ELSE문을 사용한 방법이다 s[j] 배열과 s[-1-j]배열을 비교하여 같지 않을 경우 NO를 출력해주고 FOR문이 BREAK되었을때 ELSE문을 출력한다 n=int(input()) fo.. 2022. 1. 28.
[T.I.L]DAY19 ------------------------------------------------------------ [T.I.L] ------------------------------------------------------------ 2022.01.27 - [분류 전체보기] - [개발개념] 로깅 사용방법 2022.01.27 - [프로그래밍언어/JAVA] - [Java] 스프링 MVC 구조 / 기본 기능 [Java] 스프링 MVC 구조 / 기본 기능 컨트롤러가 호출되려면 2가지가 필요하다 핸들러 매핑 핸들러 어댑터 HandlerMapping (핸들러 매핑) 핸들러 매핑에서 이 컨트롤러를 찾을 수 있어야 한다 예를 들어 스프링 빈의 이름으로 핸들러를 yikanghee2.tistory.com 스프링 컨트롤단 구.. 2022. 1. 27.
[Java] 스프링 MVC 구조 / 기본 기능 컨트롤러가 호출되려면 2가지가 필요하다 핸들러 매핑 핸들러 어댑터 HandlerMapping (핸들러 매핑) 핸들러 매핑에서 이 컨트롤러를 찾을 수 있어야 한다 예를 들어 스프링 빈의 이름으로 핸들러를 찾을 수 있는 핸들러 매핑이 필요하다 HandlerAdapter (핸들러 어댑터) 핸들러 매핑을 통해서 찾은 핸들러를 실행할 수 있는 핸들러 어댑터가 필요하다 예를 들어 Controller 인터페이스를 실행할 수 있는 핸들러 어댑터를 찾고 실행해야 한다 스프링 부트가 자동 등록하는 핸들러 매핑과 핸들러 어댑터 HandlerMapping 1 순위 : RequestMappingHandlerMapping (어노테이션 기반의 컨트롤러인 @RequestMapping에서 사용 2 순위 : BeanNameUrlHand.. 2022. 1. 27.
[개발개념] 로깅 사용방법 로깅 운영 시스템에서는 System.out.println() 같은 시스템 콘솔을 사용해서 정보를 출력하지 않고, 별도의 로깅 라이브러리를 사용해서 로그를 출력한다 자세한 내용은 아래 링크를 통해 확인하면 된다 SLF4J - http://www.slf4j.org Logback - http://logback.qos.ch 로그 라이브러리는 Logback, Log4 J, Log4 J2 등등 수많은 라이브러리가 있는데, 그것을 통합해서 인터페이스로 제공하는 것이 바로 SLF4 J 라이브러리다 로그 선언 private Logger log = LoggerFactory.getLogger(getClass()); private static final Logger log = LoggerFactory.getLogger(Xxx.. 2022. 1. 27.
[T.I.L]DAY18 ------------------------------------------------------------ [T.I.L] ------------------------------------------------------------ 스프링 MVC 프레임워크에 대해 배우고 있다 서블릿을 만들고 프런트 컨트롤러 패턴에 대해 배우는 중이다 오늘은 완벽하게 이해하지 못했지만 내일은 더 잘 이해할 수 있을 거 같다 2022. 1. 25.
[개발 개념] HTTP 요청 방식 GET - 쿼리 파라미터 /url?username=hello&age=20 쿼리 파라미터는 위와 같이 작성하며 URL에 ?를 시작으로 보낼 수 있다. 추가 파라미터는 &로 구분한다 메시지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달 쿼리 파라미터 조회 @WebServlet(name = "requestParamServlet", urlPatterns = "/request-param") public class RequestParamServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOExcept.. 2022. 1. 24.
[T.I.L]DAY17 ------------------------------------------------------------ [T.I.L] ------------------------------------------------------------ HTML 요청 방식에 대해 알아보았다 추가로 스프링 부트 빈 스코프에 대해 알아보았다 자세한 내용은 나중에 업로드할 예정이다 2022.01.24 - [개발 개념] - [개발 개념] HTTP 요청 방식 [개발 개념] HTTP 요청 방식 GET - 쿼리 파라미터 /url?username=hello&age=20 쿼리 파라미터는 위와 같이 작성하며 URL에 ?를 시작으로 보낼 수 있다. 추가 파라미터는 &로 구분한다 메시지 바디 없이, URL의 쿼리 파라미터에 데이터를 yikangh.. 2022. 1. 24.
[개발개념] HTTP 기본 개념 웹 서버 (Web Server) 웹 서버 ( Web Server) HTTP 기반으로 동작 정적 리소스 제공 정적 HTML, CSS, JS, 이미지, 영상 웹 어플리케이션 서버 (WAS) HTTP 기반으로 동작 웹서버 기능 포함 + 정적 리소스 제공 동적 HTML, HTTP, API(JSON) 서브릿, JSP, 스프링, MVC 차이 웹 서버는 정적 리소스, WAS는 어플리케이션 로직 자바는 서블릿 컨테이너 기능을 제공하면 WAS WAS는 어플리케이션 코드를 실행하는데 특화 특징 WAS를 쓰는것이 좋아보이지만 WAS가 너무 많은 역할을 담당하면 서버 과부화 우려 정적 리소스는 웹서버가 처리하는 것이 바람직함 WAS는 중요한 어플리케이션 로직 처리 서블릿 특징 서버에서 처리해야 하는 업무를 대신해줌 서버 TC.. 2022. 1. 22.
[T.I.L]DAY16 인텔리제이 오류를 찾다가 하루가 다 흘렀다 문제는 유료버전인줄 알고 있었는데 다운로드를 잘못받아서 생긴 문제였다 다시 다운로드 받으면 WAR파일을 잘 읽어온다 화이팅...! HTTP 기본 개념을 한번 더 상기시켜봤다 2022.01.22 - [개발 개념] - [개발개념] HTTP 기본 개념 [개발개념] HTTP 기본 개념 웹 서버 (Web Server) 웹 서버 ( Web Server) HTTP 기반으로 동작 정적 리소스 제공 정적 HTML, CSS, JS, 이미지, 영상 웹 어플리케이션 서버 (WAS) HTTP 기반으로 동작 웹서버 기능 포함 + 정적 리소스 제공 동적. yikanghee2.tistory.com 2022. 1. 22.
[Java] 스프링 컨테이너 스프링 컨테이너 ApplicationContext를 스프링 컨테이너라고 한다 스프링 컨테이너는 @Configuration이 붙은 Config를 설정 정보로 사용한다 여기서 @Bean이라 적힌 메서드를 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다 스프링 컨테이너 생성 //스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext를 스프링 컨테이너라고 하고 인터페이스이다 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 어노테이션 기반의 자바 설정 클래스로 만들 수 있.. 2022. 1. 21.
[Java] 빈 스코프 스코프는 빈이 존재할 수 있는 범위를 뜻한다 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다 프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다 차이점 싱글톤 빈 요청 프로토타입 빈 요청 서로 다른 컨테이너에 요청하고 빈 생성 후 의존 관계 주입 후 생성한 Bean 반환 후 생로운 빈 생성 요청이 들어오면 같은 객체의 인스턴스의 스프링 빈을 반환 요청이 들어오면 같은 객체의 인스턴스의 스프링 빈을 반환 2022. 1. 21.
[T.I.L]DAY15 ------------------------------------------------------------ [T.I.L] ------------------------------------------------------------ TIL를 작성한지 어느덧 15일이 됐다. 의무감에 작성하는 것도 없지 않아 있지만 내가 배웠던 내용을 상기시켜서 보게 되는 효과는 확실히 좋다 스프링 빈 관리에 관해서 공부하고 있는데 아직까지 개념이 구체화 되지는 않는다 그래도 내일도 붙들고 보면 이해되는 부분이 분명 있을 것이다 화이팅!! 2022. 1. 21.
[Java] 스프링 의존관계 주입 스프링 의존관계 주입 스프링 @Bean을 사용하여 의존관계를 주입하는 방법이 있다 스프링 @Autowired 를 사용하여 자동으로 의존관계를 주입하는 방법이 있다 먼저 @Bean을 사용하여 의존관계를 주입해주는 방법이다 @Configuration public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } } 이 방법을 썼을 때 어노테이션을 일일이 정리해주는 고생을 해야 한다 그래서 스프링에서 의존관계를 자동으로 주입해주는데 @ComponentScan ,@Autowired을 사용한다 @Configuration @ComponentScan public .. 2022. 1. 21.
[Java] 롬북 lombok 롬복 생성자 주입을 사용하여 개발을 하다 보면 코드가 길어질 수 있다 이때 롬복을 사용하여 리팩터링 하면 간단하게 정리할 수 있다 생성자가 있는 기본적인 코드 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; @Autowired public OrderServiceImpl(MemberRepository memberRepository, ) { this.memberRepository = memberRepository; } } 롬북을 사용한 코드 @Component @RequiredArgsConstructor public class OrderServiceI.. 2022. 1. 21.
[Java] 스프링 빈 옵션처리 스프링 빈 옵션 처리 주입할 스프링 빈이 없어도 동작해야 할 때가 있다 @Autowired만 사용하면 오류가 발생할 수 있다 다음 3가지 방법으로 옵션 처리하여 위기를 극복할 수 있다 @Autowired(required=false) : 자동 주입할 대상이 없으면 수정자 메서드 자체가 호출 안됨 org.springframework.lang.@Nullable : 자동 주입할 대상이 없으면 null이 입력됨 Optional : 자동 주입할 대상이 없으면 Optional.empty 가 입력됨 //호출 안됨 @Autowired(required = false) public void setNoBean1(Member member) { System.out.println("setNoBean1 = " + member); }.. 2022. 1. 20.
[Java] ComponentScan 개념 ComponentScan 위치 지정 basePackages를 사용하여 탐색할 패키지의 시작 위치를 지정할 수 있다 이 패키지를 포함해서 하위 패키지를 모두 탐색한다 보통 위치를 지정하지 않고, 설정 정보 클래스의 위치를 프로젝트 최상단에 두는 것이 좋다 @ComponentScan( basePackages = "hello.core", } 컴포넌트 스캔 기본 대상 컴포넌트 스캔은 @Conponent 뿐만 아니라 다음과 내용도 추가로 대상에 포함한다 @component , @Controller, @Service, @Repository, @Configuration 이것을 코드로 살펴보면 이렇게 나타나 있다 @Component public @interface Controller { } @Component publ.. 2022. 1. 20.