memostack
article thumbnail
zipfile 모듈로 압축하기
Language/Python 2020. 3. 10. 10:50

zipfile 모듈은 Python 3.3 이상부터 지원해준다. 파일 압축 본 예제에서는 디렉토리와 그 하위 모든 파일들을 압축하고 있다. src_path = r"압축하고 싶은 디렉토리 경로" base_path, dir_name = os.path.split(src_path) trg_zip_name = dir_name + ".zip" cur_path = os.getcwd() # 현재 디렉토리 경로 변경 os.chdir(base_path) try: with zipfile.ZipFile(trg_zip_name, "w", zipfile.ZIP_DEFLATED) as f: for base_dir, dirs, files in os.walk(src_path): for file in files: # 상대 경로를 구한다...

article thumbnail
Spring Boot 롬복(Lombok) 적용 / Gradle과 IntelliJ 사용
Backend/Spring Boot 2020. 3. 7. 23:47

메이븐 프로젝트에 적용하는 방법은 아래 글 참고 2020/10/31 - [Spring/Spring Boot] - Spring Boot, Maven 프로젝트에 롬복 적용하기 Spring Boot, Maven 프로젝트에 롬복 적용하기 Gradle 프로젝트에 롬복 적용하는 방법은 아래 글 참고 2020/03/07 - [Spring/Spring Boot] - Spring Boot 롬복(Lombok) 적용 / Gradle과 IntelliJ 사용 Spring Boot 롬복(Lombok) 적용 / Gradle과 IntelliJ 사용.. memostack.tistory.com 롬복(Lombok) 이란? 롬복(lombok)을 이용하면 getter, setter, constructor 를 매번 생성할 필요가 없다. 롬복은..

article thumbnail
Gradle 환경에서 Spring Boot 에 Swagger 2 적용하기
Backend/Spring Boot 2020. 3. 7. 18:41

1. Dependency 적용 build.gradle에 swagger2 를 추가한다. (https://mvnrepository.com/artifact/io.springfox/springfox-swagger2/2.9.2) dependencies { ... // Swagger 2 compile group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2' compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2' ... } 웹 UI 화면을 보려면, springfox-swagger-ui 를 추가해야 한다. 2. Swagger2 Enable @EnableSwagger2 어노..

Git 좋은 커밋(Commit) 메세지 작성하기
ETC 2020. 3. 4. 18:29

Git 을 사용하는 개발자마다 Commit 형식을 다르게 사용하다보니, 통일성이 없고 가독성이 떨어진다. 효율적인 의사소통을 위하여 커밋 메세지를 작성하는 방법도 통일할 필요가 있다. 좋은 메시지 작성하기 동명사(~ing)보단 명사를 사용한다. 부정문을 사용한다. 관사(a, an, the)는 사용하지 않는다. 자주 사용하는 영문구 Fix 수정, 고치다 버그 등 기능상에 문제가 있거나 수정해야하는 부분이 있을때 주로 사용한다. Fix A A 를 수정한다. Fix A in B B 안의 A 를 수정한다. Fix A witch B 또는 Fix A that B B 절의 A를 수정한다. Fix incorrect type which makes animated gifs not loop forever on device ..

article thumbnail
Java 스택(Stack)을 이용해서 순열 구하기
Algorithm 2020. 2. 24. 21:43

순열 [1, 2, 3]의 순열은 [1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1] 이다. 이처럼 같은 원소가 중복되지 않고, 조합하여 나올 수 있는 모든 경우의 집합을 뜻한다. 재귀와 스택을 이용해서 순열을 생성하는 코드를 작성한다. 코드 아래 2가지 자료구조를 사용한다. Stack stack: 원소를 담을 스택 boolean[] chosen: 이미 포함한 원소를 구분하기 위한 불리안 배열 private static void search(Stack stack) { if (stack.size() >= n) { System.out.println(stack.toString()); } else { for(int i=1; i= n) { System..

article thumbnail
Java 멱집합 구하기 (PowerSet)
Algorithm 2020. 2. 23. 22:48

멱집합 구하기 Stack과 Recursive를 이용하여, 멱집합 (Power Set) 을 구한다. {1, 2, 3} 집합의 부분 집합은 {}, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3} 이다. (공집합 포함) Java 코드 재귀함수 search() search() 메소드를 생성한다. private static void search(Stack stack, int k) { if(k >= n + 1) { System.out.println(stack.toString()); // 부분 집합을 출력한다. } else { // k를 부분집합에 포함한다. stack.add(k); search(stack, k + 1); // k를 부분집합에 포함하지 않는다. stack.pop..

article thumbnail
Scala의 열거형(Enumeration type)
Language/Scala 2020. 2. 23. 16:48

Scala의 열거형 스칼라에는 경로 의존 타입 (path-dependent type)을 활용한 열거형(enumeration type)이 있다. 경로 의존 타입과 관련된 추상 타입의 상세 내용 > 2020/02/23 - [Language/Scala] - Scala 추상 타입 (type T) 스칼라의 Enumeration 을 이용한다. (패키지: scala.Enumeration) object Color extends Enumeration { // scala.Enumeration val Red = Value val Blue = Value val Green = Value } 짧게 작성하는 것도 가능하다. object Color extends Enumeration { val Red, Blue, Green = Va..

article thumbnail
Scala 추상 타입 (type T)
Language/Scala 2020. 2. 23. 16:21

추상 타입 추상 타입을 이용하면 선언 시점에서 어떤 타입인지 알려지지 않은 타입을 참조할 수 있다. 추상타입을 사용하지 않는 아래 예제를 보면 class Food abstract class Animal { def eat(food: Food) } class Grass extends Food class Cow extends Animal { // override def eat(food: Grass) {} // 파라미터 타입이 다르기 때문에 오버라이드 할 수 없다. override def eat(food: Food) {} } 동물(Animal)은 음식(Food)을 먹는다. 소(Cow)는 풀(Grass)을 먹는다. (소는 동물을 상속받고, 풀은 음식을 상속받는다) 하지만, 파라미터가 다르기 때문에 Animal을 ..

article thumbnail
Scala 추상 val 초기화
Language/Scala 2020. 2. 23. 14:58

추상 val 초기화시 문제점 아래와 같이 (추상 val을 가진) 트레이트를 인스턴스화하여면, 추상 val의 정의를 구현해야 한다. trait RationalTrait { val numerArg: Int val denomArg: Int require(denomArg != 0) } 위 예제(트레이트)는 분수를 표현하는 트레이트이다. (numerArg: 분자, denomArg: 분모) 따라서, denomArg 는 0이 될 수 없다. 만약 위 Rational 이 트레이트(Trait) 가 아닌 클래스였다면, new Rational(expr1, expr2) 와 같이 구현할 수 있다. new Rational(expr1, expr2) 실행 순서 expr1, expr2 식을 계산한다. Ratinal()을 초기화 한다. ..

article thumbnail
Scala 추상 멤버 (타입멤버, 메소드, val, var)
Language/Scala 2020. 2. 22. 18:46

트레이트에 추상 멤버를 정의한다. trait Abstract { type T def transform(x: T): T val initial: T var current: T } 타입멤버 (T), 메소드 (transform), val(initial), var(current) class Concrete extends Abstract { type T = String override def transform(x: String): String = x + x override val initial: T = "hi" override var current: String = initial } 타입 멤버 (T) 스칼라에서 추상 타입은(abstract type) 클래스나 트레이트의 멤버로 정의없이 선언만된 타입이다. type ..