분류 전체보기
-
의존성을 '조절'하기 위해 인터페이스와 구현을 분리하자개발/OOP, Design Pattern 2021. 2. 21. 00:56
조영호님의 오브젝트 챕터1 을 읽고 배운점 객체지향은 객체의 자율성을 높여 응집성을 높이고, 객체간의 의존성을 조절 하여 이해하기 쉽고 변경하기 쉬운 코드를 작성하는 것이 중요하다. 그런데 왜 객체간의 의존성을 '낮추는 것'이 아닌 '조절' 일까? 자율성을 높여보자 다음과 같이 매표원 역할을 하는 TicketSeller 클래스가 있다. 이 클래스는 표를 판매하기 위해 TicketOffice 를 가지고 Audience 파라미터를 참조한다. 의존성 측면에서 보면 문제가 없어보이지만, TicketSeller가 임의로 TicketOffice의 상태를 변경하고 있다. public class TicketSeller { private TicketOffice ticketOffice; public void sellTo(..
-
[live-study] 12. 어노테이션 (Annotation)개발/Java 2021. 2. 20. 21:25
Annotation 목표 자바의 애노테이션에 대해 학습하세요. 학습할 것 (필수) 애노테이션 정의하는 방법 @retention @target @documented 애노테이션 프로세서 어노테이션 이란? 어노테이션은 코드에 넣는 주석이라고 보면 되고, 컴파일 과정이나 실행 중 코드를 어떻게 처리할지 알려주는 메타데이터다. 이 자체는 기능을 가지지 않는다. 즉, 런타임중에 알아야하는 데이터는 못들어간다. 컴파일러 수준에서 해석되거나 완전히 정적이어야 한다. Spring MVC 에서 @GetMapping(변수) 가 불가능하다. 컴파일 과정이나 실행 중 코드를 처리하는 것은 보통 다음 3가지 이다. 컴파일러가 문법 오류를 체크할 수 있도록 정보 제공 (@Override) 소프트웨어 개발 툴이 빌드나 배치시 코드를..
-
[live-study] 11. enum개발/Java 2021. 2. 20. 21:24
live-study 11주차 목표 자바의 열거형에 대해 학습하세요.학습할 것 (필수) enum 정의하는 방법 enum이 제공하는 메소드 (values()와 valueOf()) java.lang.Enum EnumSet enum enum(열거형) 이란? enum은 계절 이나 요일 처럼 하나의 집합을 상수로 정의할 수 있는 특별한 데이터 타입이다. 상수를 정의한다고 해서 서로 아무 관련이 없는 상수들을 정의해놓는 것은 바람직 하지 않다. 예를 들어 JAVA_VERSION 과 OS_VERSION 를 묶는 것은 바람직 하지 않다. 정의한 상수는 하나의 타입이 되어 type-safety하게 코드를 작성할 수 있게 해준다. enum 정의하는 방법 클래스나 인터페이스와 같은데, class/interface 키워드 대신..
-
[live-study] 10. 멀티쓰레드개발/Java 2021. 1. 23. 13:02
멀티쓰레드 프로그래밍 프로세스(Process)와 스레드(Thread)란 무엇인가? 스레드를 알기 전에, 프로세스를 먼저 알아야 한다. 프로세스는 운영체제에서 실행중인 (보통)하나의 응용 프로그램 단위를 말한다. 하나의 응용 프로그램을 실행하면 운영체제로부터 그에 필요한 메모리를 할당받아 독립적인 공간을 가지고 있다. 스레드는 프로세스가 가지는 작은 프로세스이자 하나의 실행 환경이라고 볼 수 있다. 프로세스는 최소 하나의 스레드를 가지며, 자원을 공유한다. (메신저에서 파일을 보내는 것, 메세지를 보내는 것 각각이 스레드라고 볼 수 있다.) 프로세스 내부에서 이러한 스레드가 여러개 존재하면 멀티 스레드이다. Main 쓰레드 우리가 자바 애플리케이션을 실행시키면 가장 먼저 main() 메소드를 실행시킨다. ..
-
투 포인터 알고리즘알고리즘/알고리즘 2021. 1. 20. 18:13
시간이 없어 상당히 날림으로 썼으며, 생각나면 수정할 예정 programmers.co.kr/learn/courses/30/lessons/67258 투 포인터 알고리즘 배열에 시작점/끝점 포인터를 설정하고 포인터들을 이동시켜가면서 부분 배열을 비교하며 원하는 결과를 도출한다. 백준2003 - 수들의 합2 문제 (www.acmicpc.net/problem/2003) N개의 수로 이루어진 수열 A에서 A[i]~A[j]의 합이 M이 되는 모든 경우의 수를 구하는 문제다. 즉 부분 수열이 M이 되는 모든 경우의 수를 구하는 것이다. 가장 쉽게 생각할 수 있는 것은 3중 for문을 사용하는 것이다. 모든 수열의 크기에 대해 시작점을 바꿔가며 전부 선형으로 비교해보는 것이다. // 초기 입력 int n = scann..
-
(java) DFS로 순열 구하기알고리즘/알고리즘 2021. 1. 19. 14:38
DFS(Depth First Search)를 사용해서 순열 만들기 https://programmers.co.kr/learn/courses/30/lessons/67257 코딩테스트 연습 - 수식 최대화 IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과 programmers.co.kr 문제를 해결하던 중 [+. -. *] 을 포함한 모든 경우의 수가 필요했다. 그래서 DFS를 이용한 순열을 구현해보았다. 아래 두 필드는 클래스(전역) 필드이다. ArrayList permutedOps = new ArrayList(); // 기호들을 담고 있는 리스트를 만들어야 하기 때문에 이중..
-
위상정렬 (Topological Sorting) (백준 3665 최종순위)알고리즘/알고리즘 2021. 1. 15. 10:37
순위를 찾거나, 선수과목(prerequiste) 구하기등 순서가 중요할 때 사용할 수 있다. 백준 3665 최종순위는 위상정렬을 사용해 풀 수 있다. 3665번: 최종 순위 올해 ACM-ICPC 대전 인터넷 예선에는 총 n개의 팀이 참가했다. 팀은 1번부터 n번까지 번호가 매겨져 있다. 놀랍게도 올해 참가하는 팀은 작년에 참가했던 팀과 동일하다. 올해는 인터넷 예선 본부에 www.acmicpc.net 위상정렬이란? 방향 그래프에 존재하는 정점들의 순서를 구하는 알고리즘이다. 특징 하나의 방향 그래프에는 여러 위상 정렬이 가능하다. 순서를 구할 때 선행조건이 지켜져야 한다. (A를 하기 위해 B가 선행되야 한다 등의 조건들) 그러나 최종 순위처럼 한 가지 결과를 원할 때는 조건을 걸어서 2개 이상의 결과가..