언어의 구문을 정의하는 방법에 들어가기에 앞서 구문, 의미론, 화용론의 정의를 반드시 알아야한다. 구문(Syntax), 의미론(Semantics), 화용론(Pragmatics) 구문(Syntax) : 프로그램의 형태 의미론(Semantics) : 프로그램의 의미 화용론(Pragmatics) : 특정 상황에서 프로그램의 의미 다음 예시를 보자 A mouse is kicking a cat. 해당 문장은 문법적으로 전혀 문제가 없다. 정상적인 구문이라고 할 수 있다. mouse a cat is a kicking. 그러나 이 문장은 문법으로 옳지 않다. 올바르지 않은 구문이다. 이렇듯 구문(Syntax)은 프로그램의 형태가 올바른 문법으로 작성되어 타당성의 여부가 판단된다. A mouse is kicking a..
스터디
아래 링크에서 안드로이드 스튜디오를 다운받을 수 있다. https://developer.android.com/studio Download Android Studio & App Tools - Android Developers Android Studio provides app builders with an integrated development environment (IDE) optimized for Android apps. Download Android Studio today. developer.android.com 설치 라이선스 동의까지 완료하면 설치가 끝난다. 간단한 "Hello World APP"을 제작해보자 (1) 'New project' 선택 (2) 'Empty Views Activity' 선택..
안드로이드 OS는 구글이 인수하고 현재 오픈소스로 무료 공개되어 있다. OS, middleware, 앱까지 제공되며 삼성, LG, Sony, 샤오미, 화웨이 등 사용하고 있다. 안드로이드 OS 버전 버전 10 이전은 C부터 P까지 디저트 이름을 사용했다. 현재는 10 이후로 숫자로만 표기 중이다. 현재 가장 최신버전은 13(곧 14) 안드로이드 OS 특징 오픈소스 : Apache v2 라이선스(회사/개인 무제한 사용 허가) 자바 언어 기반 : 코틀린 가능(자바 기반으로 자바와 호환성이 좋다.) 스마트폰 앱을 위한 모든 요소(comprehensive components) 제공 : 이것저것 조합해서 만들기 쉽다. 앱들간 연관 쉬움 : 다른 앱들간의 특징을 가져와서 쓸 수 있다. 넓은 범위 기능 제공 : 리눅..
모바일은 자유롭게 움직이거나 걸어다닌다는(moving or walking around freely) 의미이다. 모바일 프로그래밍은 모바일 디바이스를 위한 애플리케이션을 개발하는 것이다. 현재 스마트폰의 사용량이 증가됨에 따라 그 중요성이 점점 증가하고 있다. 이러한 모바일 프로그래밍의 궁극적인 목적은 "All in one" 모바일 디바이스를 통해 모든걸 해결할 수 있는 것을 지향한다. 모바일 vs 데스크탑 모바일 데스크탑 컴퓨팅 리소스 CPU RAM 저장장치 (HDD/SSD) 배터리 디스플레이 크기 프로그래밍 리소스 언어 Java, Kotlin, JavaScript, Swift, C, C++ C#, C++, Java, Go, Hava, Python, JavaScript, PGP, Swift, Kotlin..
컴파일러와 인터프리터는 모두 사람이 작성한 코드를 기계가 실행할 수 있는 하위 수준 코드로 변환한다. 컴파일러 vs 인터프리터 컴파일러 인터프리터 완전한 코드 → 실행 가능한 프로그램 생성된 실행 프로그램의 실행 성능과 효율성에 중점 코드와 실행을 연결하는 것이 상대적으로 어렵다. 컴파일 시간에 오류를 찾는다. C++ 표현식 읽고 평가 → 명령 실행 구현하기는 쉽지만 속도가 느리다. 런타임 오류 → 코드에 직접 연결 부분 코드를 실행 가능(일부 표현식) Python 컴파일러 고급 언어 코드 → 컴퓨터에서 실행 가능한 기계 명령어 인간과 기계 사이의 번역기 object file : 컴파일러는 객체(대상) 언어로 코드를 생성 그런 다음 이러한 개체 파일은 하나의 실행 가능한 프로그램으로 결합 컴파일 단계 어..
새로운 PL을 설계하려면 먼저 새로운 프로그래밍 언어의 목적을 알아야한다. 예) 수치계산, 웹 프로그래밍, 시스템 프로그래밍 등 그리고 새로운 프로그래밍 언어의 목적에 유용한 공통 개념을 구현하고 목적을 달성하기 위해 이러한 개념으로 인해 발생하는 단점을 최소화시킨다. 예) Null Safety 언어 설계 기준 좋은 프로그래밍 언어 디자인은 다양한 기준을 고려한다. 이러한 기준은 언어의 다양한 특성에 영향을 받는다. Readability(가독성) : 언어를 읽고 이해하는 것이 얼마나 쉬운가? Writability(작성가능성) : 우리가 원하는 프로그램을 작성하는 데 언어가 얼마나 쉬운가? 예) 어셈블리 언어 vs. C/C++ vs. Python. Reliability(신뢰성) : 언어가 항상 예상대로 작..
튜링 머신 1936년 앨런 튜링(Alan Turing)이 고안하였다. 원래는 자동 기계를 의미하는 "a-machine" 이라 불렀다. 계산 전반의 특성을 증명하기 위해 발명된 이론적이고 상상적인 기계 현대 컴퓨터의 기초 테이프(Tape) : 일정한 크기의 셀(Cell)로 나뉘어 있는 종이 테이프. 각 셀에는 기호가 기록, 길이는 무한 헤드(Head) : 종이 테이프의 특정 한 셀을 읽을 수 있는 헤드 행동표 : 특정 상태에서 특정 기호를 읽었을 때 해야 할 행동을 지시 기호 삭제나 수정, 헤드를 오른쪽/왼쪽 한 칸 이동, 상태를 변경 테이프에 기록될 수 있는 기호 및 튜링 머신의 상태와 행동표의 개수는 모두 유한해야 하며 서로 구분된다. '현재 상태가 1인데 기호 'A'를 읽었다면 'B'를 기록하고 정지..
프로그래밍 언어는 결국 컴퓨터에서 실행된다. 따라서 프로그래밍 언어를 설계하거나 이를 사용하여 프로그램을 개발하려면 컴퓨터가 어떻게 작동하는지 이해가 필요하다. 우리는 무엇을 고려해야 할까? = 컴퓨터에서 PL을 실행할 때 무엇을 고려하는가? 따라서 우리는 컴퓨터가 PL에 제공하는 것이 무엇인지 알아야 한다. PL이 제공받는 것은 다음과 같다. 데이터 유형(Data types) 연산자(Operators) 실행 통제(Control of Execution) 데이터 통제(Control of Data) 메모리 관리(Memory Management) 입력과 출력(Input and Output) 데이터 유형(Data types) 컴퓨터가 계산을 수행할 때 데이터에 대한 계산이 수행되는 경우가 많다. 다양한 데이터 ..
여러 언어를 작성하기 위해 컴파일러와 인터프리터를 설치해야한다. 따라서 자신만의 소프트웨어 개발환경을 구축해야한다. 본 강좌에서는 VSCode를 중심으로 실습을 진행한다. 그러나 다른 툴을 사용해도 무관하다. 통합개발환경(IDE) 다양한 소프트웨어 개발 작업을 지원하는 프로그램이다. 예: VSCode, Eclipse, IntelliJ, PyCharm 등 IDE의 주요기능은 다음과 같다. 구문 강조(Syntax Highlight) • 다양한 구문 위치에 있는 단어를 강조 표시 • 코드의 가독성 크게 향상되어 생산성 향상 • 코드 편집기에서 사전 컴파일 시간에 구문 오류를 확인 자동 완성(Auto Completion) • 몇 글자만 입력하면 자동으로 코드를 추천하거나 완성 • IDE의 가장 뛰어난 기능 중 ..
우리는 주로 소프트웨어 개발을 할때 프로그래밍 언어를 주로 "사용" 해왔다. 그렇다면 프로그래밍 언어를 "만드는" 것은 어떤가? 프로그래밍 언어론은 좋은 프로그래밍 언어를 설계하는 방법과 프로그래밍 언어 개발을 위한 기반을 구축하는 방법을 다룬다. 많은 프로그래밍 언어는 유사한 패러다임을 따르는 유사한 개념을 다르게 구현한다. 예를 들어 "정렬 프로그램"을 생각해 보자. 다양한 언어는 각각의 다양한 알고리즘을 구현을 통해 정렬 프로그램을 작성할 수 있다. 각각의 프로그램은 뭔가를 나름대로 순서대로 정리할 것이다. 이번 강좌를 통해 프로그래밍 언어의 설계 원리와 개념 프로그래밍 언어의 설계와 구현 방법 다양한 그로그래밍 언어 패러다임 프로그래밍 언어의 종류 등에 대하여 공부한다. PL(Programming..