전체 글 46

docker quick start 따라해보기

도커 퀵 스타트 docker 환경설정 mac - docker 데스크톱 docker run hello-world library : 도커 허브의 공식 이미지가 저장되어 있는 네임스페이스 local에서 hello-world:latest 를 찾을 수 없기 때문에 library/hello-world에서 pull 해오게 된다 docker image ls repository, tag 확인 가능 docker ps --all 여전히 running 중이면 --all 없이도 뜬다 Dockerfile Dockerfile 은 컨테이너를 위해 개인 파일 시스템을 조립하는 방법을 설명 응용 프로그램을 컨테이너화 하기 위함 docker build --tag bulletinboard:1.0 / successfully tagged bu..

Backend 2020.06.07

왜 도커를 사용해야 할까요?

Docker 왜 도커를 사용해야 할까요? 참고 유튜브 컨테이너 애플리케이션을 환경에 구애받지 않고 실행하는 기술 서버마다 다른 운영기록 a서버는 잘 되는데 b서버는 왜 죽지? 같은일을 했는데? 눈송이서버 눈송이서버에서 애플리케이션이 죽으면 굉장히 많은 가능성을 따져야 한다 tmux를 사용해서 다양한 서버에 동시에 명령어를 전달하기도 한다 Docker file 도커 파일을 빌드하면 도커 이미지를 만들어 준다 도커이미지 : 명령어들을 모두 실행한 결과물 도커 이미지는 명령어 시행 시점까지 저장한다 1년사이에 스크립트의 내용이 바뀔 수도 있다. 그러나 도커 이미지를 만들어두면 1년전 도커이미지를 그대로 사용할 수 있다 서버를 코드화 한다 견고함 유연성 서버를 소프트웨어 사용하듯 다른사람의 도커이미지 실행해 보..

Backend 2020.06.07

kotlin의 제네릭 타입 파라미터 (generic, property)

9.1 제네릭 타입 파라미터 제네릭스를 사용하면 타입 파라미터를 받는 타입을 정의할 수 있다 Map map의 key, value 값의 타입을 명시해 줄 수 있다 kotlin은 llistOf("Dumitry", "asdfa") 이런 리스트를 받으면 type을 string으로 알아서 추론해 준다 val readers : MutableList = mutableListOf() val readers = mutableListOf() // 위 두 선언은 동등하다9.1.1 제네릭 함수와 프로퍼티 리스트를 다루는 함수를 작성하는 경우 모든 타입의 리스트를 잘 다루고 싶다 컬렉션을 다루는 라이브러리 함수는 대부분 제네릭 함수이다 ex.slice 9.1.2 제네릭 클래스 선언 표준 자바 인터페이스인 List를 코틀린으로 정..

Languages 2020.06.03

kotlin 고차함수에서의 흐름제어 (return, @label)

8.3 고차 함수 안에서 흐름 제어 루프 안에 return 이 있는 코드를 람다로 바꿀때 일어나는 일 8.3.1 람다 안의 return 문 val people = listOf(Person("Alice", 29), Person("Bob", 31)) fun lookForAlice(people : List){ people.forEach{ if(person.name == "Alice"){ println("Found!") return } } println("Alice is not found") } 이름이 Alice인 경우에 lookForAlice 함수는 return 된다 위 예제처럼 람다 안에서 return 사용하면 람다로부터만 반환 되는게 아니라 그 람다를 호출하는 함수가 실행을 끝내고 반환된다 이런것을 non..

Languages 2020.05.27

kotlin의 inline 함수 (고차함수, synchronized)

8.2 인라인 함수 : 람다의 부가 비용 없애기 람다를 사용하는 구현은 똑같은 작업을 수행하는 일반 함수를 사용한 구현보다 덜 효율적이다 람다가 변수를 포획하면 람다 생성때마다 새로운 무명 클래스 객체 생성 반복되는 코드를 별도의 함수로 빼내기 + 효율적인 코드는 없을까? --> inline 함수! 8.2.1 인라이닝이 작동하는 방식 inline 변경자를 함수에 붙이면 컴파일러는 그 함수를 호출하는 모든 문장을 함수 본문에 해당하는 바이트 코드로 바꿔준다 inline fun synchronized(lock: Lock, action: () -> T): T{ lock.lock() try{ return action() } finally { lock.unlock() } } val l = Lock() synchr..

Languages 2020.05.26

kotlin의 고차함수 (lambda)

8장. 고차함수 : 파라미터와 반환 값으로 람다 사용 고차 함수 람다를 인자로 받거나 반환하는 함수 고차함수를 사용해서 코드를 더 간결하게, 중복을 없애고 더 나은 추상화를 하자 인라인 함수 람다를 사용함에 따라 발생할 수 있는 성능상 부가비용을 없앰 람다 안에서 더 유연하게 흐름을 제어할 수 있다 8.1 고차 함수 정의 고차함수 : 다른 함수를 인자로 받거나 함수를 반환하는 함수 코틀린에서는 람다나 함수 참조를 사요해 함수를 값으로 표현할 수 있다 ex) filter 함수 list.filter {x > 0} 술어 함수를 인자로 받으므로 고차함수 8.1.1 함수 타입 val sum = {x : Int, y : Int -> x+y} val sum : (Int, Int) -> Int = {x, y -> x+..

Languages 2020.05.26

kotlin의 구조분해 선언과 component 함수

7.4 구조 분해 선언과 component 함수 val p = Point(10,20) val (x, y) = p print(x) print(y) 구조 분해를 사용하면 복합적인 값을 분해해서 여러 다른 변수를 한꺼번에 초기화 할 수 있다 내부에서 구조 분해 선언은 또 관례를 이용한다 // 외부 사용시 val (x, y) = p // 내부에서는 val x = p.component1() val y = p.component2() 내부 구조분해 선언 data 클래스의 주 생성자에 들어있는 프로퍼티에 대해서 자동으로 component 함수를 만들어준다 여러 값을 한꺼번에 반환할때, 모든 값이 들어갈 데이터 클래스를 정의하고 함수의 반환 타입을 그 데이터 클래스로 바꾼다 배열, 컬렉션에도 componentN 함수가 ..

Languages 2020.05.18

kotlin 의 비교 연산자 오버로딩 (equals, compareTo)

7.2 비교 연산자 오버로딩 7.2.1 동등성 연산자 ; equals == 연산자도 앞서 말한 방식 그대로 equals 함수로 컴파일 되는 것이다 data class의 경우 컴파일러가 자동으로 equals 함수를 생성해준다 직접 override 하여 코드 작성 가능 != equals 실행한 결과를 반전시켜 반환 7.2.2 순서 연산자 : compareTo Comparable interface 안에 들어있는 compareTo java 에서는 원시 타입의 경우에만 연산자로 비교 가능하다 kotlin은 연산자는 compareTo 연산자로 계산된다 compareValuesBy 두 객체와 여러 비교 함수를 인자로 받아서 앞에것부터 하나씩 비교한다 차이나면 끝 7.3 컬렉션과 범위에 대해 쓸 수 있는 관례 7.3...

Languages 2020.05.18

kotlin 산술 연산자 오버로딩 (+, - *)

7.1 산술 연산자 오버로딩 String 에 대해 + 연산자를 사용하는 것 또한 산술 연산자 오버로딩 BigInteger 클래스를 다룬다면 add 메소드를 명시적으로 호출하기 보다는 + 연산을 사용하는 편이 더 낫다? 컬렉션에서도 += 연산자를 사용하도록 할 수 있다 7.1.1 이항 산술 연산 오버로딩 data class Point(val x : Int, val y : Int){ operator fun plus(other: Point): Point { return Point(x+otherx, y+other.y) } } val p1 = Point(10,20) val p2 = Point(30,40) println(p1 + p2) 위 코드에서 + 를 써주면 plus 함수가 호출된다 plus 앞에 operato..

Languages 2020.05.18

kotlin의 null 가능성과 collection

6.3 컬렉션과 배열 6.3.1 널 가능성과 컬렉션 List? 널이 될 수 있는 값으로 이루어진 널이 될 수 있는 리스트 val validNumbers = numbers.filterNotNull() filterNotNull 함수로 null 값들을 filter 햇다고 할때, valNumbers 값은 List 값이 될 수 있다 6.3.2 읽기 전용과 변경 가능한 컬렉션 kotlin 에서 컬렉션안의 데이터에 접근하는 인터페이스와, 컬렉션 안의 데이터를 변경하는 인터페이스를 분리 접근하는 인터페이스 : kotlin.collections.Collection size, iterator, contains 등의 메소드 변경하는 인터페이스 : kotlin.collections.MutableCollection Mutabl..

Languages 2020.05.07