전체 글 (53) 썸네일형 리스트형 코틀린: 정규 표현(3) ■ 응용 4: 정확하게 이메일 주소를 입력했는지 검사가장 기본적인 이메일 패턴은 "example@gmail.com"입니다. 이에 대한 정규 패턴은 "^[a-zA-Z]+@[a-zA-Z.]+$" 입니다. 메타 기호 ^과 $는 각각 문자열의 시작과 끝을 가리킵니다. 이메일은 영어 대소문자 1개 이상으로 시작해야 합니다("^[a-zA-Z]+"). 이어서 기호 @가 있어야 하며, 영어 대소문자와 마침표(.)로 이루어진 문자열이 1개 이상 나타나고 끝나야 합니다("[a-zA-Z.]+$"). 아래 예에서 변수 email(example@gmail.com)이 이 패턴과 일치하지만, email4와 email5는 일치하지 않습니다. email4( example@gmailcom )는 기호 @ 다음에 마침표(.)가 없기 때문입.. 코틀린: 정규 표현(2) 정규 표현(1)에서 기본적인 정규 표현 사용법과 코딩 스타일을 알아 보았습니다. 메타 기호 각각의 의미와 사용 방법에 대해 설명하는 것보다는 응용 예제를 다뤄보면서 메타 기호 사용 방법을 익혀나가는 게 도움이 될 겁니다.■ 응용 1 : 날짜 및 휴대폰 번호 추출먼저 문자열에서 날짜를 추출합니다. "\d"는 "[0-9]"와 같은 정규표현입니다. '\d'는 소문자 d가 아니라, 숫자([0-9])를 나타내는 메타 기호입니다. 소문자 d와 구분하기 위해 역슬래시(\)를 붙여 '\d'로 사용합니다. 문자열 따옴표(")안에서 사용할 때는 이스케이프(escape) 문자인 역슬래시(\)를 하나 더붙여 '\\d'로 사용해야 합니다. 이스케이프 문자를 추가하는 게 귀찮거나 헷갈리면(?) 삼중 따옴표(""")를 사용하면 됩.. 코틀린: 정규 표현(1) 쉽게 다가가는 최신 프로그래밍: 코틀린에서는 정규 표현을 전혀 다루지 못해 여기서 자세히 설명하겠습니다.정규 표현(regular expression)은 문자열 패턴을 정의합니다. 정규 표현은 메타 기호(meta symbol)를 사용하기 때문에, 메타 기호의 의미를 잘 알고 있어야 합니다. DOS 창이나 Unix/Linux 쉘에서 명령어 "dir *.exe" 를 사용해 본 적 없나요? *(star)가 바로 메타 기호입니다. "dir *.exe" 는 해당 폴더에서 확장자가 exe인 모든 파일을 보여달라는 명령이죠. 정규 표현은 컴퓨터 전공자에게는 기본입니다. 프로그래밍 언어의 문법(Context Free Grammar)을 이해하려면 정규 표현을 알아야 하기 때문입니다. 정규 표현은 유한 오토마타(finite.. 쉬어가는 글: 람다 식은 어떻게 유래되었나요? 자세한 내용은 쉽게 다가가는 최신 프로그래밍: 코틀린 - 3.2 함수형 프로그래밍을 참고하기 바랍니다. 프로그래밍 언어가 등장한 역사적 변천 과정을 얘기해보려고 합니다.람다 식(lambda expression)이 등장한 배경을 알려면 람다 대수(lambda calculus)를 알아야 합니다. 람다 대수는 튜링 기계(turing machine, TM)를 만든 Alan B. Turing의 지도 교수인 Alonzo Church까지 연결됩니다. 람다 대수가 등장한 시기는 1930년대이며 컴퓨터가 없었습니다. Church는 영국의 수학자입니다. 이 당시 수학자들이 고민하던 문제는 뭐였을까요? "어떤 가설(문장)이 논리적으로 타당한지 판단할 수 있는 장치가 있을까" 였습니다. 이를 결정 문제(decision pr.. 코틀린: DSL(2/2) - CSV 빌더를 만들어 봅시다. ■ 클래스 FileCSV 앞에서는 한 개의 행 밖에 처리하지 못했습니다. 이제 여러 개 행들을 처리하도록 코드를 추가해 봅시다. 이를 위해 클래스 FileCSV를 만듭니다. 속성 rows는 여러 행을 저장하기 위해 가변 리스트 객체로 선언합니다. 리스트 객체 rows의 원소(=행) 타입은 RowCSV입니다. 메소드 row()는 원소를 리스트 객체 rows에 추가합니다. 재정의 메소드 toString()은 행과 행을 구분하기 위해 줄바꿈 문자('\n')를 추가합니다.class FileCSV { private val rows = mutableListOf() fun row(makeRow: RowCSV.() -> Unit) { val rowCSV = RowCSV().apply(makeRo.. 코틀린: DSL(1/2) - CSV 빌더를 만들어 봅시다. DSL은 Domain Specification Language(영역 규정 언어)의 약자입니다. 이름만으로는 선뜻 이해하기 어렵죠. 간단히 DSL은 "언어"입니다. DSL이 언어이지만, c나 파이썬 같은 일반 프로그래밍 언어가 아니라, 응용 분야가 제한된(domain-specific) 언어입니다. 그런 언어가 있나요? HTML이나 SQL이 바로 DSL입니다. HTML은 웹 페이지를 만들 때, SQL은 데이터베이스 질의어(query)로 사용하죠. 그런데, 엄밀히 따지면 HTML이나 SQL은 여기서 다루려는 코틀린 DSL과는 차이가 있습니다. 코틀린 DSL은 주로 빌더(builder) 역할을 하기 때문입니다. 아래 예를 볼까요. HTML로 웹 페이지를 만들 때 기본 구조입니다. ... DSL은 코틀린 .. 4장 - (아주 쉽게 설명한) 다양한 sealed 클래스를 만들어 봅시다. 쉽게 다가가는 최신 프로그래밍: 코틀린 - 4장 클래스의 연습문제 5번을 잘 풀었나요? 문제는 아래와 같습니다.문제 5 교재 p.195-197의 코드는 다형성(polymorphism)을 적용해 다각형의 면적을 계산하는 코드입니다. 이를 sealed class(봉인 클래스)를 사용해 구현하세요.(1) 봉인된 부모 클래스 이름은 Shape, 자식 클래스 이름은 Circle, Rectange, Triangle 입니다.(2) sealed class Shape 안에 자식 클래스를 모두 선언해야 합니다(교재 p.93 코드를 참고하세요). 4장 정답해설을 보고도 잘 이해가 되지 않았나요? 조금 더 자세히 살펴볼까요. sealed 클래스에서 sealed는 "봉인하다"는 뜻입니다. 키스로 봉한 편지(sealed with.. 3장 - (아주 쉽게 설명한) 함수를 람다 식으로 변환해 봅시다(2/2). 앞에서 일반 함수를 람다 식으로 변환하는 방법을 설명했습니다. 함수 isPrime()은 어떤 숫자가 소수인지 여부를 판별합니다. 아래 코드는 isPrime()을 return 문을 사용하지 않는 람다 식(방법 2)으로 바꾼 것입니다. val isPrimeLambda: (Int) -> Boolean = { n: Int -> var status: Boolean = true for (i in 2..위 코드를 아래처럼 확~ 바꿀 수 있습니다. 코드가 이해되나요?val isPrimeLambda : (Int)-> Boolean = { n: Int -> (n > 1) && (0 !in Array(n-2){ i -> n % (i+2)})}위 코드를 차근차근 분석해 볼까요? 람다 식 블록은 논리 AND.. 이전 1 2 3 4 ··· 7 다음