목차 이전 글에서 자바에서의 전략패턴 구현에 대해 알아본 적이 있다. [Java]전략패턴 [Java]전략패턴 목차 Strategy Pattern 전략 패턴은 정책 패턴(Policy Pattern)이라 불리기도 하며, 소프트웨어의 실행 중 상황에 맞는 알고리즘을 선택해 실행할 수 있도록 하는 객체 지향 디자인 패턴이다. 예를 들자면 gnidinger.tistory.com 그 이후로 이런저런 구현을 하다가, 파이썬을 이용해 개발을 해야 할 일이 생겼는데, 아예 처음부터 전략패턴을 적용해서 구조를 설계하면 좋을 것 같다는 생각이 들어서 공부하게 되었다. 이 글에서는 위의 글과 마찬가지로 정렬 로직을 이용해 전략패턴을 구현하는 법을 살펴본다. 각 구현에 대한 세부사항은 아래 글에 적혀있다: [Java+Pytho..
목차 문제 오아시스의 재결합 공연에 N명이 한 줄로 서서 기다리고 있다. 이 역사적인 순간을 맞이하기 위해 줄에 서서 기다리고 있던 백준이는 갑자기 자기가 볼 수 있는 사람의 수가 궁금해졌다. 두 사람 A와 B가 서로 볼 수 있으려면, 두 사람 사이에 A 또는 B보다 키가 큰 사람이 없어야 한다. 줄에 서있는 사람의 키가 주어졌을 때, 서로 볼 수 있는 쌍의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 줄에서 기다리고 있는 사람의 수 N이 주어진다. (1 ≤ N ≤ 500,000) 둘째 줄부터 N개의 줄에는 각 사람의 키가 나노미터 단위로 주어진다. 모든 사람의 키는 $2^{31}$ 나노미터 보다 작다. 사람들이 서 있는 순서대로 입력이 주어진다. 출력 서로 볼 수 있는 쌍의 수를 출력한다. 풀이..
이전 글에서 MVC 아키텍처를 적용하고, Express 프레임워크를 사용한 Node.js 프로젝트의 기본 패키지 구성과 그 안에 속한 파일을 알아봤다. 오늘부터는 해당 패키지 안에 존재하는 모듈에 대해서 한 줄씩 파보려고 한다. 그러다 보면 내 JS 이해도가 따라오겠지. Terminology 시작하기 전에 먼저 단어를 정리하고 넘어가자. 물론 아래의 설명은 초심자가 어깨너머로 정리한 것이라 틀릴 확률이 높다. Node.js에서 각 .ts 파일들은 '모듈'이라고 불린다. 이 모듈은 자바의 클래스와 비슷하게 느껴지지만 서로 다른 목적과 개념을 가지고 있으며, (예를 들자면 모듈은 코드의 모듈화가, 클래스는 객체 지향 프로그래밍이 주된 목적이다) 공통점으로는 모두 코드의 재사용성과 가독성을 향상시키고, 구조를..
목차 자바에는 일반적으로 쓰이는 String 클래스 말고도 두 가지 클래스가 더 존재한다. 똑같이 문자열을 저장 및 관리하는 클래스가 왜 세 가지나 있을까? 차이점을 간결하게 정리하자. String vs. String Buffer / Builder String - 한 번 생성되면 할당된 메모리 주소가 변하지 않는다. '+' 혹은 concat() 메서드를 사용해 문자열을 추가하면 기존 메모리주소에 이어서 할당되는 것이 아닌 문자열이 추가된 새로운 문자열을 생성해 저장한다. 이때 힙 메모리엔 기존의 문자열이 Garbage로 남아 GC에 의해 회수되기 전까지 메모리를 차지하는데, 문자열의 수정이 자주 발생한다면 계속해서 Garbage가 쌓이게 된다. 이를 불변(immutable) 하다고 한다. 굳이 왜 이런 ..
Class 클래스는 객체 자체가 아닌 객체를 생성하기 위한 틀이자 설계도이다. 기본적으로 class 키워드를 이용해 아래와 같이 정의하며, public class Car{ int doors = 4; // (1)필드 void stop {...} // (2)메서드 Car {...} // (3)생성자 class Car2 {...} // (4)내부 클래스 } 필드, 메서드, 생성자, 내부 클래스의 구성요소 중 생성자를 제외한 세 가지를 클래스(혹은 생성된 객체)의 멤버라 부른다. 각 구성요소의 특징은 아래와 같다. 필드 - 클래스(객체)의 속성을 나타내는 변수. 차의 모델명, 색깔, 문의 개수 등이 있다. 메서드 - 클래스(객체)의 기능을 나타내는 함수. 가속하기, 멈추기 등이 있다. 생성자 - 클래스의 객체를..
메서드(Method) 메서드는 클래스 영역에 선언된 함수이다. 더 정확하게는 "특정 작업을 수행하는 명령문들의 집합"이며, 클래스의 기능에 해당한다. 메서드는 다음과 같이 선언한다. public static int add(int x, int y) { // 메서드 시그니처 int result = x + y; // 메서드 바디 return result; } 뜯어보자면 메서드 시그니처에 해당하는 부분에는 메서드에 대한 정보를, 메서드 바디에 해당하는 부분에는 해당 메서드가 호출될 시 수행하는 작업에 대한 정보를 담고 있다. 계속 보자면, 위 메서드는 이름이 add이며, int 타입 두 개의 값(x, y)을 매개변수로 입력받아 더해주는 메서드이다. 메서드 이름 add 앞의 int는 이 메서드의 반환 타입을 말하..
필드(field) 필드는 클래스에 포함된 변수를 말한다. 이 변수는 또 세 가지로 나뉘는데, 클래스 변수(cv, class variable) 인스턴스 변수(iv, instance variable) 지역 변수(lv, local variable) 가 그것이다. 세 유형은 클래스 내에서 선언된 위치에 따라 한 번, static 키워드에 따라 또 한 번 나눠지는데, 간단히 예를 들면 다음과 같다. class Example { // => 클래스 영역 int instanceVariable; // 인스턴스 변수 static int classVariable; // 클래스 변수(static 변수, 공유변수) void method() { // => 메서드 영역 int localVariable = 0; // 지역 변수({}..
객체지향 프로그래밍(Object Oriented Progamming)은 객체가 무엇인지 아는 것에서 시작한다. 객체를 알기 위해선 객체를 생성하는 도구인 클래스에 대해서도 알아야 하는데, 각각의 개념은 다음과 같다. 객체(Object) - 우리가 인지할 수 있는 모든 것. 사용할 수 있는 실체 클래스(Class) - 객체를 정의한 설계도 또는 틀 클래스는 객체 자체가 아니라 객체를 생성하는 데 사용되는 하나의 틀에 불과하다. 클래스를 통해 생성된 객체를 인스턴스(Instance)라 부른다. 조금 추상적인 이야기라 이해하는데 어려움이 있었지만, 대략 위와 같은 단어에 익숙해지면 되는 듯하다. 객체와 인스턴스는 거의 같은 개념이지만 조금 다르다는 것도 알 수 있었다. 추가로 최초의 클래스를 잘 만들어 두면 ..
- Total
- Today
- Yesterday
- 야경
- 중남미
- 세계여행
- spring
- 지지
- 칼이사
- BOJ
- 리스트
- 면접 준비
- 유럽여행
- 자바
- RX100M5
- 동적계획법
- 맛집
- 세모
- 여행
- Backjoon
- 세계일주
- 백준
- a6000
- 유럽
- 알고리즘
- 남미
- 스트림
- 파이썬
- Algorithm
- Python
- java
- 스프링
- 기술면접
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |