프로그래밍 기초 36

클린 아키텍처 번역

https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html Clean Coder Blog The Clean Architecture 13 August 2012 Over the last several years we’ve seen a whole range of ideas regarding the architecture of systems. These include: Though these architectures all vary somewhat in their details, they are very similar. They all have blog.cleancoder.com 클린 아키텍처 시스템 아키텍처에 관한 다양한 아이디어들..

int와 Integer의 차이

우선 원시 타입과 참조 타입에 대해 알아보면 int와 Integer의 차이를 더 쉽게 이해할 수 있다. 원시 타입 vs 참조 타입 원시 타입 - stack에 값이 그대로 저장되는 타입을 말한다. - 어딜 참조하고 있는게 아니므로 보다 빠르게 값에 접근할 수 있다. 참조 타입 - stack에 값이 그대로 저장되어 있지 않다. - stack에는 heap의 어딘가를 가리키는 주소가 저장되어 있다. 해당 주소를 따라가면 값을 찾을 수 있다. - 실제 값이 stack에 저장되어 있는 것이 아니라 stack을 갔다가 heap을 가서 해당 값을 찾아야하므로 원시 타입에 비해 데이터 접근 속도가 느리다. 참조 타입은 보통 원시 타입에 비해 기능을 더 많이 제공해준다. 그래서 메모리를 더 많이 잡아먹는다. 자바에서 원시..

커플링(coupling), 디커플링(decoupling) - 번역

커플링, 디커플링 커플링과 디커플링은 소프트웨어 시스템에서 두 엔티티 간 관계를 성명하는 용어이다. 한 클래스가 다른 클래스를 사용할 때 해당 클래스에 '의존'한다고 말하며 그 둘이 coupled 되었다고 말한다. 그들 중 적어도 한 클래스는 다른 클래스에 대해 알고 있다. 디커플링은 이러한 클래스 간의 결합이 느슨하게 되어있을 때를 뜻한다. 느슨한 결합(loose coupling)이라고도 하고 디커플링(decoupling)이라고도 한다. 디커플링을 해야 하는 이유 ClassA가 ClassB에 크게 의존하는 경우 ClassB가 변경될 때 ClassA가 영향을 받을 가능성이 높다. 반대로 ClassA가 ClassB에 적게 의존하는 경우 ClassB가 변경될 때 ClassA가 영향을 받을 가능성이 낮다. 그..

의존성 주입(dependency injection) - 번역

https://www.jamesshore.com/v2/blog/2006/dependency-injection-demystified James Shore: Dependency Injection Demystified When I first heard about dependency injection, I thought, “Dependendiwhatsit?” and promptly forgot about it. When I finally took the time to figure out what people were talking about, I laughed. “That’s all it is?” “Dependency Injection” is a www.jamesshore.com 짧은 버전 Dependency ..

dist 폴더

dist는 distributable(배포 가능한)의 약자로, 재사용되는 소스 코드를 컴파일하거나 축소할 필요 없이 다른 사람이 직접 사용할 수 있는 파일이 저장되는 디렉터리를 의미합니다. Java 라이브러리의 경우, 누군가 작성한 소스 코드를 사용하려면 먼저 소스를 컴파일해야 사용이 가능합니다. 그러나 라이브러리 작성자가 이미 사전 컴파일된 버전을 저장소에 넣어두면, 사용자는 컴파일 과정 없이 바로 사용할 수 있습니다. 이러한 이미 컴파일된 버전이 dist 디렉터리에 저장됩니다. JS 모듈의 경우에도 비슷한 원리가 적용됩니다. 보통의 경우 JS 코드는 프로덕션에서 사용하기 위해 축소되고 난독화됩니다. 따라서 JS 라이브러리를 배포할 때는 일반 소스 코드를 src 디렉터리에, 축소 및 난독화된 버전을 di..

CLI란?

CLI란 Command Line Interface의 약자로 이름 그대로 명령어를 입력해서 컴퓨터를 동작시키는 것이다. CLI 말고 GUI라는 단어도 있다. GUI는 Graphic User Interface의 약자로 우리가 흔히 사용하는, 아이콘을 클릭하거나 터치하여 컴퓨터를 동작하는 형식을 말한다. 그냥 편하게 GUI만 쓰면 되지 CLI를 왜 사용할까? 1. CLI로만 할 수 있는 작업이 있다. 예를 들어 Git에서 제공하는 기능을 100% 사용하려면 CLI를 사용해야 한다. GUI도 지원을 하지만 CLI보다 지원되는 기능이 작다. 게다가 배치 잡 스케쥴러, 애플리케이션 서버 가동, 빌드 및 배포 등등은 보통 CLI로만 할 수 있다. 2. 프로그램 설치가 쉽다. 브라우저 열어서 홈페이지 찾은 뒤, 다운 ..

수열

수열 규칙성이 있는 숫자들의 나열로 일정한 규칙에 따라 한 줄로 배열된 수의 열을 뜻한다. 첫 번째 수열(a1)부터 n 번째 수열까지 있을 때 아래와 같이 나타낼 수 있다. 등차수열 연속된 두 항의 차가 모두 같을 때 이를 등차수열이라 하고 그 둘의 차이를 공차(공통된 차이)라 한다. 공차는 d로 표시한다 (common difference) 3의 배수로 만든 수열 {3, 6, 9, 12, 15,...}에서 연속된 두 항의 차는 3으로 모두 같으니 이 수열은 공차가 3인 등차 수열이다. 첫 번째 항 3이고 두 번째 항은 6이다. 뒤로 한 칸씩 갈 때마다 공차를 더한 형태다. 따라서 위 수열의 n 번째 항은 3 + (n - 1)d이다. 일반화하면, 첫 번째 항이 a일 때 n 번째 항을 구하는 식은 아래와..

최대공약수, 최소공배수, 유클리드 호제법

최대공약수 (Greatest Common Divisor - GCD) 두 수의 공약수 중 가장 큰 수를 뜻한다. 최소공배수 (Least Common Multiple - LCM) 두 수의 공배수 중 가장 작은 수를 의미한다. lcm = 두 수의 곱 / gcd로 구할 수 있다. 유클리드 호제법 두 양의 정수의 최대공약수를 구하는 방법이다. 두 양의 정수 a, b(a > b)에 대하여 a = bq + r일 때 a와 b의 최대공약수는 b, r의 최대공약수와 같다. r = 0이라면, a, b의 최대공약수는 b가 된다. 이를 파이썬으로 구현해보면 다음과 같다. def Euclidean(a, b): while b != 0: r = a % b a = b b = r return a 내부 과정을 확인해보면 아래와 같다. d..

음수 나머지 연산

어떤 수 n을 m으로 나누었을 때 몫이 q이고 나머지가 r이면 n = m*q + r이다. 따라서 어떤 수를 나누었을 때 몫과 나머지는 위의 식만 지키면 된다. 7을 3으로 나누면 2.3333...... 이 된다. C언어의 경우 이 소수점 뒤의 수를 '버림'을 하여 2가 되고 Python의 경우 '내림'을 해서 2를 만든다. 식은 다음과 같다. 7 = 3*2 + 1 양의 나눗셈을 할 때는 몫이 둘 다 2로 같은 반면, 음수 나눗셈을 하면 두 언어는 다른 몫을 도출해낸다. 7을 -3으로 나누면 -2.3333...... 이 된다. C언어의 경우 이 소수점 뒤의 수를 '버림'을 하므로 몫은 -2가 된다. 이를 식으로 표현하면 다음과 같다. 7 = -3*-2 - 1 Python의 경우 -2.3333...... 을..