본문 바로가기
  • 실행력이 모든걸 결정한다
반응형

분류 전체보기580

[Spring] Template/Callback 패턴 템플릿/콜백 방식은 전략 패턴과 DI의 장점을 익명 내부 클래스 방식과 결합하는 방법을 사용한다. 1. Template - 어떤 목적을 위해 미리 만들어둔 틀을 말하며, 이 고정된 틀 안에 바꿀 수 있는 부분을 넣어서 효율적으로 사용된다. - 고정된 작업 흐름을 가진 코드를 재사용할 때 유용하게 쓰인다. - Template/Callback 패턴에서 Callback 오브젝트를 받는 곳이다. 2. Callback - 다른 오브젝트에서 실행되는 것을 목적으로 다른 오브젝트의 메소드에 전달하는 오브젝트로, 주로 파라미터를 통해 전달된다. - 다른 오브젝트에서 콜백 오브젝트의 값을 참조하기보다는, 콜백 오브젝트의 메소드를 실행시키기 위한 목적으로 사용된다. - 일반적으로 하나의 메소드를 가진 인터페이스를 구현한 .. 2022. 3. 19.
[BFS] 블록 이동하기 - 2020 카카오 블라인드 채용 물체가 보드의 2칸을 차지하는 유형의 BFS 문제다. BFS 문제들 중에서는 꽤 난이도가 있는 문제였던 것 같다. 해결 방법 2x1 크기를 차지하는 로봇에 대한 구조체를 {좌표1, 좌표2, BFS 깊이}로 구성하여 생성했다. 이렇게 좌표 2개를 동시에 따지면 로봇이 가로로 서있는지, 세로로 서있는지, 어느 방향으로 서있는지 고려할 필요 없다. 또 BFS에서 방문 여부를 검사할 때도 좌표 2개를 동시에 따져야 한다. 그래서 방문 배열을 사용하지 않고, 두 좌표를 pair로 저장하는 벡터에 저장했다. 로봇이 움직일 수 있는 경우는 크게 3개로 나뉜다. 1) 회전하지 않고 상하좌우로 이동하는 경우 2) 좌표1을 기준으로 회전하는 경우 3) 좌표2를 기준으로 회전하는 경우 좌표1, 좌표2 둘 중 하나라도 벽과 .. 2022. 3. 18.
내부 클래스의 종류 1. 중첩 클래스 (Nested Class) - 클래스의 내부에 정의되는 클래스를 중첩 클래스(nested class)라고 한다. - 중첩 클래스는 정적 클래스(Static Class)와 내부 클래스(Inner Class)로 분류할 수 있다. 2. 정적 클래스 (Static Class) - 독립적으로 오브젝트로 만들어질 수 있는 클래스로, new 키워드를 사용해서 객체를 생성할 수 없다. 대신, 클래스명 자체를 사용하여 접근할 수 있다. 3. 내부 클래스 (Inner Class) - 내부 클래스를 이용하면 외부 클래스의 멤버에 쉽게 접근할 수 있다. - 클래스의 캡슐화 : 외부에서 불필요한 클래스를 은닉하여 코드의 복잡성과 클래스 파일을 줄일 수 있다. - 내부 클래스에서 외부의 변수를 사용할 때는 외부.. 2022. 3. 17.
[문자열] 방금그곡 - 2018 카카오 블라인드 채용 해결 방법 이 문제의 핵심은 치환이다. 치환 방법을 사용하지 않는다면 많은 소스 코드가 필요할 것이다. 왜냐하면, 하나의 음이 하나의 문자열을 차지해야 string 라이브러리를 편리하게 사용할 수 있기 때문이다. A#, C#, D#, F#, G#도 하나의 음이기 때문에 이를 각각 a, c, d, f, g로 치환해서 해결하면 된다. 각 함수의 용도는 주석으로 표시했다. 소스 코드 #include #include #include #include using namespace std; // 음악의 순번, 시작 시간, 끝 시간, 이름, 악보, 재생시간을 담은 구조체 struct music { int id; string start; string end; string name; string sheet; int len.. 2022. 3. 15.
[DFS] 괄호 변환 - 2020 카카오 블라인드 채용 단순히 주어진 조건대로 코딩하면 되는 문제이기 때문에 소스 코드에 사용된 함수만 설명하였다. bcheck 함수 괄호 문자열에는 균형잡히지 않은 괄호 문자열, 균형잡힌 괄호 문자열, 올바른 괄호 문자열 3가지 경우가 있는데, 어느 경우인지를 판단하여 반환하는 함수다. 괄호 문자열을 첫 문자부터 검사하면서 누적 '('과 ')'의 수를 카운트 하여 어느 케이스의 문자열인지 판단할 수 있다. - 균형잡히지 않은 괄호 문자열 : 누적 ')'의 개수가 누적 '(' 개수보다 큰 순간이 있는 경우 - 균형잡힌 괄호 문자열 : 총 ')'의 개수와 총 '(' 개수가 같은 경우 - 올바른 괄호 문자열 : 총 ')'의 개수와 총 '(' 개수가 같고, 누적 ')'의 개수가 누적 '(' 개수보다 큰 순간이 없었을 경우 dfs 함.. 2022. 3. 13.
[Spring] 테스트 코드의 작성 1. 테스트 소개 - 테스트는 자신이 예상하고 의도했던 대로 코드가 정확히 동작하는지를 확인하는 것이다. - Spring은 편리하고 빠른 테스트에 큰 가치를 두고 있다. - 구현한 기능을 직접 동작시키는 방법으로 테스트를 한다면 반드시 필요한 모든 기능들이 구현이 되어 있어야 하는데, 작은 단위의 테스트를 진행해주면 에러가 났을 때의 위치도 파악하기 쉬워지고, 에러는 없지만 기능이 제대로 동작하지 않는 경우에도 문제의 원인을 찾기가 수월해진다. - 실제 개발 소스코드와 테스트 소스코드를 구조적으로 분리하면 개발에도 큰 도움이 될 것이고, 코드를 작성하면서 머릿속에서 이루어졌던 테스트들을 테스트 코드로 구현하여 로직 작성에 더욱 집중할 수 있게 된다. - 다양한 조건에 따른 테스트가 가능하기 때문에 오류를.. 2022. 3. 10.
[그리디] 추석 트래픽 - 2018 카카오 블라인드 채용 해결 방법 프로그래밍 언어로는 날짜 계산에 익숙한 Java를 선택했다. 요청 날짜가 밀리초(millis)까지 표시되므로, 두 날짜의 차이는 두 Date 객체의 getTime() 값의 차이로 구할 수 있다. getTime()은 지정된 시간을 long 타입의 밀리초로 표시한다. 그리고, 처리시간은 시작시간과 끝시간을 포함하므로, 측정 범위에서 끝시간-시작시간=999ms가 된다는 점을 기억해두자. 날짜 계산은 이렇게 하는걸로 하고, 이제 요청 i와 요청 j가 1초 간격 내에 포함되는가를 따져봐야 한다. 먼저, 요청 i의 왼쪽점 기준으로 따져봐야 한다. 요청 i의 왼쪽점 기준으로 요청 i와 요청 j가 1초 간격 내에 포함되는 경우는 다음과 같다. 위 4가지 경우는 3가지 조건으로 다음과 나타낼 수 있다. -> .. 2022. 3. 9.
두 날짜 사이의 시간차 구하기 (Java) SimpleDateFormat 클래스는 날짜 정보를 원하는 형태로 다룰 수 있게 해주는 클래스이다. 이번 예제에서는 parse(), getTime() 메소드가 사용된다. parse() 메소드는 지정한 형태의 Data형으로 파싱해서 반환해주고, getTime() 메소드는 지정한 날짜에 대한 시간을 밀리초 단위로 나타낸다. 아래 예제는 2022년 3월 6일 오전 10시 51분 30.000초부터 2022년 3월 6일 오전 10시 52분 35.516초까지의 시간차를 구하는 예제이다. 날짜 데이터를 SimpleDateFormat에 지정한 형식에 맞게 문자열로 만들고, parse() 메소드의 인자로 넣으면 Date형이 반환된다. 두 Date 객체에 getTime() 메소드를 각각 호출해서 두 반환값의 차이를 얻으면.. 2022. 3. 6.
[Spring] @Value가 null을 가져오는 문제 @Value가 property값을 받아오지 못했다면 아래 4가지 사항을 검토해보기를 바란다. 1) 프로퍼티 이름의 스펠링이 틀렸을 경우 2) 오브젝트가 스프링에서 관리되도록 하지 않은 경우 클래스 위에 @Service, @Component와 같이 Bean으로 등록하지 않았다면 Spring의 DI를 활용할 수 없다. DI를 활용하기 위해서는 호출하는 쪽에서도 스프링에서 빈으로 관리가 되어야 한다는 점은 잊지 말도록 하자. 3) static 변수로 받는 경우 @Value값을 static 변수로 직접 받을 수는 없다. 꼭 static 변수로 저장해야 한다면, @Value값을 setter 메소드의 파라미터로 받아서 static 변수에 저장하면 된다. 4) 외부에서 이 클래스를 new로 생성했을 경우 이 클래스에.. 2022. 3. 6.