전체 글 682

코드에 혼란을 느끼는 이유(2)

코드에 혼란을 느끼는 이유(1) 코드를 보다보면 혼란에 빠질 때가 있다. 개발자가 코드를 보며 혼란에 빠지는 경우는 3가지이다. 1. 지식의 부족 2. 정보의 부족 3. 처리능력의 부족 지식의 부족 2 2 2 2 2 T n 여기서 T가 무엇을 의 lordofkangs.tistory.com 지난 포스팅에서 개발자가 코드를 보며 혼란을 느끼는 이유 3가지를 정리했다. 1. 지식의 부족 2. 정보의 부족 3. 처리능력의 부족 이번 포스팅에서는 3가지 원인을 사람의 인지과정을 통해서 정리해보려고 한다. 사람의 인지과정 사람의 기억은 장기기억과 단기기억이 있는데 새로운 데이터는 단기기억에 저장된다. 단기기억은 임시로 저장되는 공간으로 저장공간이 적어 RAM과 같다. 반복되는 단기기억은 데이터가 아닌 정보가 되어 ..

후기/도서후기 2023.03.08

코드에 혼란을 느끼는 이유(1)

코드를 보다보면 혼란에 빠질 때가 있다. 개발자가 코드를 보며 혼란에 빠지는 경우는 3가지이다. 1. 지식의 부족 2. 정보의 부족 3. 처리능력의 부족 지식의 부족 2 2 2 2 2 T n 여기서 T가 무엇을 의미하는지 아는가? 해당 언어의 '지식'이 있는 사람이라면 쉽게 대답할 수 있겠지만 '지식'이 없는 사람이라면 대답 할 수 없다. 이처럼 코딩 중 어려움을 겪는 첫 번째 이유는 '지식'이 없어서이다. 정보의 부족 public class BinaryCalculator{ public static void main (Integer n){ System.out.println(Integer.toBinaryString(n)); // Integer.toBinaryString(n) ? } } JAVA 문법의 '지..

후기/도서후기 2023.03.03

[MODERN JAVA] 람다(Lambda)란?

파라미터로 값이 아닌 '코드'를 넘겨야 하는 순간이 있다. 이때 사용하는 기술이 '동적 파라미터화'이다. '람다'가 등장하기 전에는 동적 파라미터화는 무겁게 구현되었다. 1) 구현객체 넘기기 List result1 = getFilteredApples(apples,new ColorPredicate()); // new ColorPredicate() 구현객체 넘기기 List result2 = getFilteredApples(apples,new ColorPredicate()); // new ColorPredicate() 구현객체 넘기기 위와 같이, '코드'를 포함한 구현객체를 파라미터로 넣는 방법이 있고 2) 익명클래스 사용 //Runnable 익명클래스 넘기기 Thread t = new Thread(new R..

Dev/JAVA 2023.02.14

[알고리즘] 분할정복(Divide&Conquer) 이란?

분할정복(Divide&Conquer)이란? 재귀호출 방식의 완전탐색의 단점을 보완하는 방식으로 전체를 부분으로 분할(Divide) 한 뒤 다시 부분을 전체로 병합(Merge)하는 과정을 거쳐 문제를 해결하는 방식이다. [알고리즘] 재귀호출(recursive call)이란? '재귀호출(recursive call)'은 완전탐색을 구현할때 용이하다. 완전 탐색은 선형적 방식과 재귀적 방식(계층적) 으로 접근할 수 있다. 선형적 방식은 반복문을 돌려 하나씩 탐색하는 방식이다. 재귀 lordofkangs.tistory.com 재귀호출(Recursive Call)은 발생 가능한 모든 조합을 완전탐색하는 방식으로 n부터 1까지 모든 함수가 호출된다. 하지만 이런 재귀호출 방식은 특정한 규칙이 있는 문제라면 비효율이다..

[Python] 재귀호출 - 보글 게임 ( Boggle Game )

완전 탐색에는 두 가지 방법이 있다. 1. 반복문 2. 재귀 호출 반복문은 모든 데이터에 접근할 때 사용되고 재귀호출은 모든 데이터 '조합'에 접근할 때 사용한다. 보글 게임 ( Boggle Game ) 5x5 알파벳 보드판에 상하좌우 및 대각선으로 인접한 칸들을 이동하면서 찾고자 하는 '단어'를 찾는 게임이다. 단어 'PRETTY'를 찾는다고 가정하자. 'PRETTY'는 하나의 알파벳이 아닌 알파벳의 '조합'이다. 단순히 알파벳 P를 찾는 문제이면 이중 for문(반복문)을 이용하여 완전탐색하면 된다. 하지만 BOGGLE 게임은 알파벳 '조합'을 찾는 문제이다. 1. 데이터 - 상하좌우/대각선 이동 데이터 ( 자료구조 : 배열 ) - 보글게임 보드판 ( 자료구조 : 배열 ) dx = [-1,-1,-1,1..

문제풀이 2023.01.28

[MODERN JAVA] 동작 파라미터화 - Comparator,Runnable,Callable

[MODERN JAVA] 동작 파라미터화 - 익명 클래스(Anonymous Class) [MODERN JAVA] 동작 파라미터화 - 전략 디자인 패턴 ( Strategy Pattern ) 변화에 대처 가능한 코드를 짜려면 어떻게 해야할까? 컴파일에 결정되는 코드가 아닌 런타임에 결정되는 코드를 짜야 한다. 대표 lordofkangs.tistory.com 지난 포스팅에서 동적파라미터화를 구현하기 위해 익명클래스를 이용해보았다. 이번 포스팅에서는 익명클래스를 사용하여 동적파라미터화를 구현한 대표적인 예시들을 알아보겠다. Comparator List 클래스는 sort 메소드를 갖는다. List 자료구조 안 객체를 정렬하는 메소드인데, 정렬 기준이 되는 '소스'를 파라미터로 넘기는 동적 파라미터화가 구현되어 있..

Dev/JAVA 2023.01.25

[MODERN JAVA] 동작 파라미터화 - 익명 클래스(Anonymous Class)

[MODERN JAVA] 동작 파라미터화 - 전략 디자인 패턴 ( Strategy Pattern ) 변화에 대처 가능한 코드를 짜려면 어떻게 해야할까? 컴파일에 결정되는 코드가 아닌 런타임에 결정되는 코드를 짜야 한다. 대표적으로 동작 파라미터화(behavior parameterization)이 있다. 많은 데이 lordofkangs.tistory.com 지난 포스팅에 이어 동작 파라미터화에 대해서 알아보겠다. '동작 파라미터화'란 메소드의 파라미터로 값이 아닌 '코드(Code)'를 넘기는 기술이다. 이전 포스팅에서는 인터페이스를 만들고 구현클래스를 생성하여 동작 파라미터화를 구현했다. 하지만 매번 구현클래스를 생성하는 것도 낭비이다. 단 한 번 파라미터로 코드를 넘기기 위해, 클래스를 생성하는 것은 메..

Dev/JAVA 2023.01.16

[DOCKER] 우분투 리눅스에 도커엔진(Docker CE) 설치하기

우분투 버전 : Ubuntu 20.04.3 LTS 도커 버전 : Docker verision 20.10.21 1. 도커 설치하기 # 도커 공식 GPG 키 가져와 등록하기 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # 도커 공식 Repository 등록하기 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" # 패키지 update하기 sudo apt-get update # Docker CE 패키지 설치하기 sudo apt-get install docker-ce # Doc..

Ops/Docker 2022.11.19

[OOP] 추상 팩토리 패턴(Abstract Factory Pattern)

디자인 패턴이란? 객체지향설계 과정에서 발생하는 문제들을 해결하기 위한 패턴(Pattern) 문제 상황 결합도를 낮추기 위해 인터페이스를 사용하지만 구현객체를 생성(new)하는 과정에서 결합이 발생할 수 밖에 없다. 이때 new 객체 생성 권한을 Factory 클래스에게 넘겨주므로써 객체 간 결합도를 낮출 수 있다. 서버에 특정 파일을 배포, 백업, 삭제하는 프로그램을 만든다고 가정해보자. Deploy, Backup, Remove는 모두 각각의 Machine 객체와 결합되어진다. 이같은 구조는 소스중복으로 이어지고 기능이 추가될 경우 유지보수에도 좋지 못하다. 그래서 도입된게 바로, 인터페이스이다. Machine 인터페이스로 인하여 결합도는 낮아졌지만 아직도 조금의 결합도가 있다. public class..

Dev/OOP 2022.11.13

[OOP] 싱글톤 패턴(Singleton Pattern)

디자인 패턴이란? 객체지향설계 과정에서 발생하는 문제들을 해결하기 위한 패턴(Pattern) 문제 상황 서블리(Servlet)을 예로 들어보겠다. 서블릿은 서버로 들어오는 수많은 클라이언트의 요청에 대응하기 위한 java 클래스이다. 만약 HTTP 요청이 들어올 때마다 서블릿 인스턴스를 생성한다면 메모리는 OOM이 발생한다. @WebServlet("/hello") // 서블릿 매핑 public class JspStudy extends GenericServlet { //초기화 부분 public void init() { System.out.println("서블릿 초기화"); } //실행 부분 public void service(ServletRequest request, ServletResponse respo..

Dev/OOP 2022.11.13