반응형 분류 전체보기313 [Java] 가변인자(Varargs) Java에서 오버로딩(Overloading)이란 개념이 존재한다. 오버로딩은 같은 이름의 메서드를 매개변수의 타입과 개수를 다르게 정의하여 다양한 메서드를 구현하는 것을 의미한다. 만약 Varargs 클래스에서 String 타입의 매개변수를 1, 2, 3개씩 가지는 print() 메서드를 오버로딩한다고 해보자. 아마 다음과 같이 구현할 것이다. class Varargs { public void print(String s1) { System.out.println(s1); } public void print(String s1, String s2) { System.out.println(s1 + " " + s2); } public void print(String s1, String s2, String s3) {.. 2021. 8. 16. 백준 1727 : 커플 만들기 https://www.acmicpc.net/problem/1727 1727번: 커플 만들기 첫째 줄에 n, m(1≤n, m≤1,000)이 주어진다. 다음 줄에는 n명의 남자들의 성격이 주어진다. 그 다음 줄에는 m명의 여자들의 성격이 주어진다. 성격은 1,000,000이하의 자연수이다. www.acmicpc.net [ 문제풀이 ] 최적화 문제는 그리디, DP, 파라메트릭 서치 중 하나라고 생각하기 때문에 처음에는 그리디로 접근하였는데 틀렸습니다가 나와서 DP로 해결하였다. 먼저 dp 테이블을 다음과 같이 정의하자. dp[i][j] : (1~i)까지의 남자와 (1~j)까지의 여자를 커플 매칭했을때 성격 차이 최소값 그렇다면 점화식은 어떻게 될까? 남자(i), 여자(j)의 수가 같다면 모두 커플이 이루어져야.. 2021. 8. 16. 스레드 안전(Thread Safe)을 지키기 위한 방법 스레드란 CPU 이용의 기본 단위로써 프로세스의 실행 단위이다. 하나의 프로세스는 한 개 이상의 스레드를 가질 수 있는데, 이처럼 다수의 스레드를 수행하는 것을 멀티 스레딩이라고 한다. 프로세스 내부의 스레드들은 각각 스택 영역을 독립적으로 가지지만 스택 영역을 제외한 힙, 데이터 영역을 서로 공유하기 때문에 스레드들이 동시에 공유 자원에 접근하게 되면 예상치 못한 결과가 발생할 가능성이 생기게 된다. 간단한 예시로 현재 통장에 100만원이 들어있다고 하자. 만약 공유 자원에 대한 동시 접근을 막지 않았다면 N명이 동시에 100만원을 출금을 해버리면 100만원이 Nx100만원이 돼버리는 문제가 발생하게 된다. 이러한 상황을 "스레드 안전(Thread Safe)하지 않은 상황"이라고 부른다. 스레드 안전(.. 2021. 8. 15. 백준 16988 : Baaaaaaaaaduk2 (Easy) https://www.acmicpc.net/problem/16988 16988번: Baaaaaaaaaduk2 (Easy) 서기 2116년, 인간은 더 이상 AI의 상대가 되지 못하게 되었다. 근력, 순발력, 창의력, 사고력, 문제해결능력, 심지어 인간미조차 AI가 인간을 앞선다. AI가 온 지구를 관리하며 이미 인류는 지구의 www.acmicpc.net [ 문제풀이 ] 전형적인 삼성 스타일의 문제로 바둑돌 2개를 둘 수 있는 모든 경우의 수에 대해서 죽일 수 있는 상대 돌의 개수를 찾아주면 되는 문제이다. 바둑돌 2개를 두는 방법은 백트래킹 기반의 조합으로 구해주면 된다. 상대 돌의 갯수를 찾는 방법은 2인 돌에서 시작하여 dfs를 통해 방문할 수 있는 모든 2인 돌을 탐색하면서 0(빈 공간)을 만나지 .. 2021. 8. 15. [Java] 명명 관습(Naming Conventions) 나는 프로그래밍을 할 때 변수, 메서드, 클래스 등을 선언할 때 일관성이 없고 그때그때마다 조금씩 다른 형식으로 선언하는 좋지 못한 습관을 가지고 있다. 이는 혼자 개발하는 데는 크게 상관이 없지만 협업 과정에서는 가독성이 상당히 떨어지기 때문에 의미를 이해하기가 난해해지고 오류 발생 가능성을 높일 수 있다. 이러한 문제점을 해결하기 위해서 언어마다 변수, 메서드 등의 이름을 다루는 명명 관습(Naming Conventions)이라는 것이 존재한다. 규칙(Rule)이 아닌 관습(Conventions)이기 때문에 반드시 지켜야 하는 것은 아니지만 이러한 관습을 유지함으로써 코드의 가독성을 높이며 오류 발생 가능성을 줄일 수 있기 때문에 불가피한 상황이 아니라면 명명 관습을 이행하는 것이 좋다. Java도 .. 2021. 8. 14. 백준 1275 : 커피숍2 https://www.acmicpc.net/problem/1275 1275번: 커피숍2 첫째 줄에 수의 개수 N과 턴의 개수 Q가 주어진다.(1 ≤ N, Q ≤ 100,000) 둘째 줄에는 처음 배열에 들어가 있는 정수 N개가 주어진다. 세 번째 줄에서 Q+2번째 줄까지는 x y a b의 형식으로 x~y까지의 합 www.acmicpc.net [ 문제풀이 ] 전형적인 세그먼트 트리를 이용해서 구간합을 구하는 문제이다. 세그먼트 자료구조를 공부하였다면 쉽게 해결할 수 있다. 세그먼트 트리 자료구조를 모르거나 공부하고 싶다면 아래 글을 참고하길 바란다. https://sorjfkrh5078.tistory.com/14?category=1007493 세그먼트 트리(Segment Tree) 이번에 배워볼 자료구조는.. 2021. 8. 14. 커맨드 패턴(Command Pattern) 커맨드 패턴(Command Pattern)은 행위(Behavioral) 패턴 중 하나로써 요청을 객체의 형태로 캡슐화하여 재이용하거나 취소할 수 있도록 요청에 필요한 정보를 저장하거나 로그에 남기는 패턴이다. 요청에 사용되는 각종 명령어들을 추상 클래스와 구체 클래스로 분리하여 단순화한다. 요청을 객체화시키기 때문에 상태가 남게 되며 이는 나중에 작업을 취소, 로그 등에 활용할 수 있다. 커맨드 패턴의 구조는 다음과 같다. Invoker : Client가 요청을 전달하는 매개체, 내부에서 적절한 Command에게 해당 요청을 처리하도록 위임 Receiver : 요청을 처리하기 위해 수행해야 하는 일을 가지는 객체 Command : 요청을 실행, 취소하는 기능을 가지는 인터페이스, Receiver에게 요청.. 2021. 8. 13. [Spring] Bean & DI & IoC 컨테이너 스프링의 특징 중 하나는 바로 의존성 주입(Dependency Injection, DI)이다. 계층이나 서비스들 간에 의존성이 존재할 경우 스프링 프레임워크가 서로를 알아서 연결해주기 때문에 개발자가 따로 연결할 필요가 없으며 높은 재사용성과 가독성이 있는 코드를 만들어낼 수 있는 장점이 있다. 그렇다면 스프링 프레임워크에서 어떤 친구가 DI를 제공해줄까? 바로 IoC 컨테이너라는 친구가 이러한 기능을 제공해준다. 객체를 직접 생성하지 않고 스프링 프레임워크에 등록하면 IoC 컨테이너가 원하는 곳에 등록된 객체를 주입하여 객체 간의 의존성을 만들어준다. 그럼 IoC 컨테이너는 무엇인지에 대해 먼저 알아보자. IoC(Inversion of Control)는 스프링의 특징으로 제어권이 개발자에게 있는.. 2021. 8. 13. [Spring] 스프링(Spring) MVC 패턴 이전에 MVC 패턴에 대해서 공부하였다. MVC 패턴은 Model, View, Controller로 구성되어 역할들을 분리하여 개발이 용이하도록 하는 디자인 패턴이라고 설명하였었다. 스프링(Spring) 또한 웹 애플리케이션을 개발할 때 기본적으로 MVC 패턴을 바탕으로 개발한다. 어떻게 보면 Model, View, Controller로 비슷하게 볼 수 있지만 약간 다르기 때문에 한번 알아보도록 하자. 스프링 MVC 패턴은 다음과 같은 구조를 가진다. MVC 패턴에서 사용자는 Controller, View와 소통하였다면 스프링 MVC 패턴에서 사용자는 DispatcherServlet라는 친구와만 소통한다. 이를 프론트 컨트롤러 패턴이라고 한다. 스프링 MVC 패턴은 다음과 같이 동작한다. 사용자가.. 2021. 8. 12. 이전 1 ··· 3 4 5 6 7 8 9 ··· 35 다음 반응형