본문 바로가기

전체 글

(185)
추천 알고리즘 yeomko.tistory.com/3 갈아먹는 추천 알고리즘 [1] 추천 알고리즘의 종류 들어가며 우리는 알게 모르게 매일 추천 알고리즘 속에서 살고 있습니다. 다양한 서비스들은 용케도 내가 좋아할 만한 동영상을, 웹 툰을, 페이스북 친구를, 심지어 소개팅 상대까지 추천 해줍 yeomko.tistory.com
[백준 2501번] 약수 구하기 2501번: 약수 구하기 첫째 줄에 N과 K가 빈칸을 사이에 두고 주어진다. N은 1 이상 10,000 이하이다. K는 1 이상 N 이하이다. www.acmicpc.net 먼저 손 코딩으로 접근했다. 문제 접근법은 아래와 같다. 반복문을 진행하며, i가 n이하일 경우에만 진행한다. 약수를 발견할 경우 카운팅을 한다. 만약 카운팅한 수가 k와 동일할 경우 해당 수를 출력하고 메서드를 종료한다. 약수가 존재하지 않을 경우 return에 접근하지 않기에 맨 아래에 0을 넣어 출력한다. Scanner가 아닌 BufferedReader를 사용해 처리 속도를 더욱 빠르게 하였다. 마지막에 close( )를 안해주었지만 조건 만족 후 return으로 메서드를 종료하는데, close( )가 유의미한지 학습할 필요가 있..
자바의 static 블록 클래스 생성 시의 실행 블록, static 블록 클래스가 T메모리 영역 중 스태틱 영역에 배치될 때 실행되는 코드 블록이 있다. 바로 static 블록이다. 이전에 포스팅을 하였는지 기억이 가물가물하나, static 키워드가 붙은 정적 함수, 정적 메서드는 스태틱 영역에 할당된다. 이로 모든 메서드에서 접근할 수 있다. 예제 코드를 한 번 보겠다. 가장 큰 차이점은 이전 포스팅에서 객체 생성자 메서드로 선언했다면, 이번에는 static이라는 예약어 뒤에 바로 구현했다는 것이다. 해당 클래스의 객체 생성자 메서드로 인스턴스를 생성한 뒤 main 메서드에서 실행하면 [ 동물 클래스 ]가 Console 창에 출력됨을 확인할 수 있다. ( 편의상 main method 코드는 run 메서드에 작성하고 있습니다. ..
자바의 생성자(Constructor) : new 생성자 클래스의 인스턴스. 즉, 객체를 생성할 때마다 new 키워드를 사용한다. Animal animal = new Animal( ); 이렇게 말이다. ' new 클래스명( ) '을 자세히 살펴보면 열고 닫는 소괄호가 존재한다. 이는 한 마디로 ' 클래스명( ) ' 또한 메서드임을 이야기한다. 객체 생성자 메서드 : 반환값이 없고 클래스명과 동일한 이름의 메서드로 객체를 생성하는 메서드임 객체 생성자 메서드의 경우 매개인자가 아무것도 없는 default 생성자를 자바에서 자동으로 생성한다. 하지만, 만약 인자 값을 요하는 생성자 메서드를 선언할 경우, default 생성자는 따로 명시해야 선언된다. 위 예시 코드를 보면, Animal 클래스 내에는 아무것도 선언되어 있지 않지만 Driver 클래스에서 객..
추상 메서드와 추상 클래스 ( abstract ) ◼︎ abstract 키워드 - 추상 메서드와 추상 클래스 추상 메서드( abstract method ) 간단하게 이야기하자면, 선언부는 존재하나 구현부가 없는 메서드를 칭한다. 추상 메서드를 하나라도 갖고 있는 클래스는 반드시 추상 클래스( Abstract Class )로 선언해야 한다. 추상 메서드 없이도 추상 클래스 선언이 가능하다. 다시 한 번 정리하자면, 메서드만 선언된 것으로, 몸체 ' { } '사이에 코드가 없으며, 상속 받는 클래스에게 강제해 메서드를 구현하도록 하는 것이다. 하지만 중요한 사실이있다. 추상 클래스는 인스턴스를 생성할 수 없는 클래스이다. 이처럼 말이다. 그 이유는 클래스가 미완성이기 때문이다. 추상 클래스는 내부적으로 구현되지 않은 클래스이다. 무슨 말이냐. Animal ..
[백준 1874번] 스택 수열 ( JAVA ) 문제 1부터 n까지의 수가 존재할때, 입력된 수열을 만들기 위한 push와 pop을 순서대로 출력하는 것 즉, 1부터 n까지 숫자가 증가하다가 수열의 수와 일치하는 수가 발생할 경우 해당 수까지 push한 후 pop을 해야함. ( 글로 설명하려니 어렵네 ㅠ ) 아무튼 그럼.. 문제 접근 1부터 n까지 증가하는 과정에서 수열과 일치하는 수가 발생할 경우, 해당 수까지만 Push를 한 뒤, 입력 수와 pop한 값이 동일하다면 " + " 출력 입력 수와 pop한 값이 동일하지 않다면 "NO" 출력 후 return하여 메서드 종료 stack에 아무런 데이터가 존재하지 않다면 함수 종료 코드 결과 지금까지 코드 길이가 길어도 시간은 짧게 나오는 편이었는데 이번에는 코드도 길도 시간도 길게 나왔다 😂 타인 풀이를 ..
백엔드 개발자로서 공부하는 자세 정리 ◼︎ 자바봄 '자바봄' 스터디에서 진행하는 방법과 스터디에 참여하는 자세를 글로 작성해주셨다. 진짜 반성한다..ㅠㅠ 책 읽고 "아하!"하고 이해되면 그냥 넘어갔었는데 한줄 섬세하게 읽으며 "왜?"를 더욱 고민하고 질문해야 하는 습관을 가져야겠다. 사실 해당 스터디를 보며 1 ~ 2시간, 책으로 토론이 진행된다하여 '어떻게 가능하지..?'했는데 이러한 학습 자세를 본 받아 진행해야겠다! 자바봄이 이펙티브 자바를 읽는 방법 사실 책 스터디를 반년 동안 지속하기란 쉽지 않다. 그럼에도 다들 꾸준히 하는 이유는 이 책을 가장 잘 이해하고 넘어갈 수 있는 스터디 그룹이라는 자부심이 있어서라 생각한다. 사실 책 스터 javabom.tistory.com
스프링 삼각형과 설정 정보 (2) AOP AOP [ Aspect-Oriented Programming ] 직역하자면 '관점 지향 프로그래밍'이다. DI는 의존성에 대한 주입이라면, 스프링 AOP는 로직(code) 주입이라고 할 수 있다. 프로그램을 작성하다 보면 다수 모듈이 공통적으로 나타나는 부분이 존재하는데, 이를 횡단 관심사(Cross-cutting concern)이라고 한다. 이 말이 이해가 되지 않는다면 DB와 연결할 때 코드를 생각하면 된다. ( 책 284 페이지 참고 ) 코드 = 핵심 관심사 + 횡단 관심사 이 말은 무엇이냐, 공통적으로 나타나는 횡단 관심사와 모듈별로 다르게 나타나는 핵심 관심사로 이루어져있다는 것이다. 앞서 AOP는 로직 주입이라고 설명하였는데, 로직을 주입한다면 어디에 주입할 수 있는가? 위 그림처럼 총 다섯 ..