본문 바로가기

전체 글

(271)
[Kotlin] 스트림 함수(확장 함수) - map, filter 개요 자바 8에서는 리스트나 맵과 같은 컬렉션의 자료들을 손쉽게 다룰 수 있는 스트림(stream) 기능을 제공한다. 스트림은 컬렉션의 자료를 다른 타입으로 변경하거나, 새로운 자료를 추가로 생성하는 등의 작업을 쉽게 도와준다. 코틀린에서는 이와 유사한 기능을 확장 함수의 형태로 제공한다. 확장 함수는 내부적으로 자바의 스트림을 사용하지 않아 엄밀히 말하면 스트림 함수가 아니긴하다. 변환-map() map() 함수는 컬렉션 내 요소를 다른 값이나 타입으로 변경할 때 사용한다. val cities = listOf("Seoul", "Tokyo", "New york") //도시 이름을 대문자로 변환하여 저장 후 출력 cities.map{city -> city.toUpperCase()}. .forEach{ pr..
[Kotlin] 컬렉션(Collections) Kotlin Collections 코틀린 표준 라이브러리는 컬렉션을 관리하기 위한 기능을 제공한다. 코틀린의 컬렉션은 크게 가변 컬렉션인 mutable과 불변 컬렉션인 immutable로 나뉜다. 여기서 가변 컬렉션이라고 var를 사용하는 것은 아니다. var는 객체의 참조(주소)가 가변이라는 것이다. 컬렉션에서 가변, 불변은 요소(elements)를 추가/삽입/변경이 가능하는지를 의미한다. 종류 1. List 리스트는 순서가 있는 컬렉션이다. 자료구조에서 학습한 연결리스트와 같다. var list = listOf(100,101,102) var mlist = mutableListOf() mlist.add(100) mlist.add(101) ... 자매품으로 ArrayList도 존재한다. var list ..
[백엔드] SSL 인증서 없이 https 설정하기 - CloudFlare CloudFlare Cloudflare는 무료로 HTTPS를 설정할 수 있는 선택지이다. 다만, 약간의 페이크가 도입된 기술이라고 볼 수 있다. 방문자의 요청이 Cloudflare를 거치는 과정에서는 암호화가 되어 전송되지만 Cloudflare에서 서버로 전송될 때는 평문이 전송된다. 결론은 데이터는 실제로 보호되지 않지만 보호된다고 표시만 한 것과 유사하다. 만약, 모든 과정에서 보호가 필요하다면 CloudFlare의 Full SSL을 도입하여 SSL 설정을 해주어야 한다. 하지만, Cloudfloare는 공유 SSL을 사용한다. 같은 SSL 인증서가 여러 사이트에서 공유되어 사용되어 안전하지 않다. 결론은 보안이 크게 중요하지 않지만 https라는 껍데기를 사용해야 하는 상황에서 좋은 선택지이다. 정..
[백엔드] 가비아를 통한 도메인 구매 및 등록 방법 1. 가비아에 접속하여 원하는 도메인 이름 입력 2. 적절한 도메인 선정 및 구매 여기서 .com .kr .me 등등 사실 어떤 도메인을 구매해도 무리없이 사용 가능하다. 단순히 이름별로 사이트의 특징만 부여되는 것 뿐이다. 3. 구매 후 도메인 관리로 이동 4. DNS 관리툴로 이동 5. 도메인 클릭 후 DNS 설정 버튼 클릭 6. 레코드 추가 클릭 타입:A, 호스트:*, IP주소:[IP주소], TTL(Time-to-live):600(이후에 변경) 타입 A의 의미는 IPv4주소와 도메인 주소를 1:1로 매칭하는 것을 의미. 이외에도 CNAME 등이 존재한다. 이는 도메인 이름의 별칭을 사용하는 것. 여기서 TTL은 DNS 서버에 캐시되는 시간을 의미한다. 예를들어, 600이면 600초마다 DNS 서버에..
[백엔드] Nginx 개념 및 설정 방법 Nginx Nginx는 로드 밸런스 처리에 특화된 웹 서버 프로그램이다. Nginx를 서버 앞 단에 두어 Express가 사용하는 실제 포트를 숨기고 Nginx의 80번 포트를 통해 Reverse proxing 함으로써 보안 이슈를 방지하고, Nginx의 여러 기능도 사용할 수 있다. Reverse proxy란 사용자가 실제 서버의 정보를 알지 못하게 함을 의미한다. 사용자들이 서버에 요청한 내용을 리버스 프록시가 배후의 서버에서 응답 데이터를 받아와 다시 사용자에게 전송한다.. 노드 서버가 3000번 포트에서 실행 중이며, 도메인을 발급받은 경우 Nginx를 설정하는 방법 1. 설치 $ sudo apt-get update $ sudo apt-get install nginx 2. 브라우저를 통해 서버의 ..
[Kotlin] 위임(Delegation)과 초기화 지연(lazy initialization) 읽기 전용 프로퍼티(Read-Only Property) 일반적으로 안드로이드 애플리케이션에서 대부분의 위젯 참조는 액티비티의 생명 주기와 동일하게 유지된다. 즉, 처음 할당된 참조를 바꿀 필요가 없어진다. 따라서, 이는 read-only인 val을 활용하면 된다. 하지만, val의 경우 선언과 동시에 값을 가져야 한다는 문제점이 생긴다. 아래와 같이 뷰를 참조해야될 경우 val을 통해 read-only로 참조하고 싶지만 뷰가 세팅 된 이후에 findViewById를 활용할 수 있기 때문에 불가능하다. class MainActivity : AppCompatAcitivity(){ val textView: TextView //에러 override fun onCreate(savedInstanceState: Bu..
[Kotlin] 람다 표현식(lambda expression) 람다 표현식(lambda expression) 람다 표현식은 익명 함수를 지칭하는 용어이다. 람다 표현식을 통해 간결한 프로그래밍 코드 작성이 가능하다. 기본적으로 코틀린의 람다 표현식은 다음과 같은 형식이다. //버튼의 리스너를 등록하는 람다 표현식 val button:Button = ... button.setOnClickListener({ v -> doSomething() }) 함수를 호출할 때 마지막 인자가 함수인 경우 다음은 안드로이드에서 Java를 통해 AlertDialog를 만드는 예시이다. AlertDialog.Builder alert = new AlertDialog.Builder(this) ... .setPositiveButton("확인", new OnClickListener() { @Ov..
[Kotlin] 널 안정성(Null safety) 널 안정성(Null Safety) Java에서 개발하다 가장 많이 겪는 오류는 null pointer exception이다. Kotlin에서는 null값을 허용하기 위해선 자료형 뒤에 ?을 붙여야 한다. 엘비스 연산자(?:) 널 값을 허용하지 않는 ?가 없는 값 혹은 변수에 널 값이 반환되는 경우를 대비하여 처리하는 구문이 존재하는 연산자 val postal : PostalCode //null을 허용하지 않음 = findPostalCode("1600 Pkwy") ?: PostalCode.NONE 위의 경우 findPostalCode는 null을 반환할 수도 있는 함수이다. null이 반환되지 않을 경우 적절한 PostalCode 값이 대입되고, null을 반환할 경우 PostalCode.NONE을 대입한..