본문 바로가기

java5

TDD(테스트 주도 개발) 시작하는 방법 들어가기 우아한테크코스에 지원했습니다. 합격을 위한 1차 관문인 PreCource를 진행하고 있는데, 2주 차 과제에서 테스트 코드를 작성하는 요구사항이 생겼습니다. 테스트를 해보라고 하니, 말로는 많이 들었던 TDD를 시도해볼 수 있는 좋은 기회가 될 것 같아, TDD에 대해서 찾아보았습니다. WHAT is TDD? TDD는 Test-Driven Development의 약자로, 테스트 주도 개발이라고 합니다. 간단하게 말하면, 실제 코드를 작성하기 전에 테스트 코드부터 작성한 후, 처음에는 당연히 실패할 (아직까지 작성한 코드가 없기 때문에) 테스트를 조금씩 성공시켜가며 개발을 하는 개발 방법입니다. 위키에 따르면 주목받은 지 얼마 되지 않은 TDD가 사실은 1999년에 시작됐다고 합니다. 신기하네요ㅎ.. 2022. 11. 6.
[알고리즘] LIS 최장 증가 부분 수열, SegmentTree 최장 증가 부분 수열이란? A라는 수열ㄹ에서 연속되는 것과 상관없이 Ai < Aj (단, i < j)를 만족하는 부분 수열입니다. [10, 20, 10, 30, 20, 50] 위와 같이 수열이 주어졌을 때, [10, 20] [10, 20, 30] [10, 20, 30, 50] ... 모두 증가 부분 수열이며, 그 중 가장 길이가 긴 부분 수열이 최장 증가 부분 수열입니다. 어떻게 구하나? 동적계획법을 이용하여 구할 수 있습니다. 수열 A가 주어졌을 때, D(i)를 i번째 수를 부분 수열의 마지막으로하는 부분 수열 중 가장 길이가 긴 수열의 길이라고 한다면, D(i)는 Ai보다 앞에 있고 Ai보다 작은 Aj의 j에 대하여 D(j)가 가장 큰 값 + 1이될 것입니다. 즉 index 0부터 차례로 순회하며 D.. 2022. 10. 10.
[SpringBoot] 스프링부트 이해하기- 4편 Reflection(feat. 동적 로딩) Reflection 앞선 포스팅에서 스프링/스프링부트의 DispatcherServlet에 대해 알아보았습니다.. 짧게 요약하자면, DispatcherServlet은 클라이언트의 요청을 받아서 적절한 컨트롤러(또는 핸들러)를 찾아 동적으로 실행시킨 후 결과를 받아 Http형식에 맞게 리턴하는 기능을 합니다. 이때, '적절한 컨트롤러를 찾아 동적으로 실행'시키는 부분에서 '리플렉션(Reflection)'이라는 개념이 들어갑니다. Reflection이란? 오라클 홈페이지에서는 리플렉션을 아래와 같이 소개하고 있습니다. 더보기 Reflection is a feature in the Java programming language. It allows an executing Java program to examine.. 2022. 7. 16.
[SpringBoot] 스프링부트 이해하기- 1편 Servlet이란(feat. Web Container) 최근 스프링부트 인강을 듣고 학원에서 나눠준 템플릿 위에 간단한 CRUD 게시판을 만들어보았는데, 스프링부트의 여러 설정파일이나 이 간단한 어플리케이션이 어떻게 동작하는지 전혀 모르는 것 같아서, 한번 이해해보고자 스프링부트 관련 개념들을 정리해보자한다. 누군가 프로그래밍을 배우는 과정은 눈감고 코끼리를 더듬거리며 코끼리를 알아가는 거랬는데, 엄청 와닿는 것 같다. 각설하고, 스프링부트는 우선 서버 개발을 편하게 해주는 프레임워크이기 때문에, 서버가 어떻게 동작하는지를 알아야할 것 같다. 그래서 우선 대망의 1편은 서블릿(Servlet)이다. 서블릿(Servlet)이란? 사실 개념이 잘 그려지지 않아서 여러 자료를 둘러본 후 스스로 내린 정의는 서블릿은 동적 웹 페이지(Dynamic web page)를 .. 2022. 7. 12.
[JAVA] 내부 클래스 간단 정리와 사용 이유 1. 정의 말 그대로 클래스 내부에 정의된 클래스이다. 2. 종류 익명 클래스를 제외하고는, 일반적인 멤버 변수와 메서드와 성질이 같다. 인스턴스 클래스(멤버 변수): 외부 클래스의 선언위치에서 선언, 스코프는 외부 클래스 정적 클래스(정적 맴버 변수): 외부 클래스의 선언 위치에서 선언, 스코프는 전역 지역 클래스(메서드): 외부 클래스의 메서드 안에서 선언 ,스코프는 메서드 익명 클래스: 클래스의 선언과 객체 생성을 동시에 하는 클래스(일회용) 3. 특징 중요하다고 생각되는 몇 가지 특징을 정리해보았다. 1. 외부 클래스 밖에서 일반적인 방법으로 인스턴스화 될 수 없다. 2. 외부 클래스의 멤버에 바로 접근할 수 있다. 심지어 프라이빗 변수에도 접근할 수 있다. //일반적인 클래스 사용방식 class.. 2022. 7. 8.