프로그래밍언어론

객체(Object) 객체 : 데이터, 작업을 모두 캡슐화하는 컨테이너 ADT 변수 : 해당 데이터만 나타낸다. 변수 자체를 사용하여 작업을 호출 void increment(Counter c) 객체의 데이터 항목 : 인스턴스 변수(instance variables) 작업 : 메서드(method) 메소드 호출(Method Invocation) 객체에 대한 작업 실행은 객체에 메시지를 전송하여 수행 object.method(params) 객체에 대한 메소드 호출 객체에게 메소드를 호출하도록 지시 객체 자체는 메소드의 암시적 매개변수로 간주될 수 있다. 클래스(Class) 클래스 : 객체 집합의 모델 클래스가 있는 언어에서는 모든 객체가 클래스에 속한다. 객체는 클래스의 인스턴스로 간주될 수 있다. 객체는 해당..
데이터 추상화(Data Abstraction) 물리적 시스템은 한 가지 타입만 처리 : 비트 문자열(bit strings) 고급 언어는 다양한 값에 대한 "래핑(wrapping)"을 제공 타입 : 값 + 작업 데이터 추상화 : 값은 하나로 결합될 수 있으며 적절한 작업을 통해 새롭고 더욱 추상적인 유형을 형성 가능 이 새로운 유형을 사용하여 현실 세계에서 더욱 복잡한 객체를 표현 가능 예) 레고 작품을 만들 때 아래 구조부터 쌓아서 올려서 합친다. 장점 복잡한 데이터 구조를 쉽게 처리한다. 세부 사항에 신경 쓸 필요가 없다. 인터페이스(Interface)와 구현(implementation)의 분리 구현(implementation)을 몰라도 인터페이스와 함께 사용 가능 정보 숨기기(Information H..
스크립팅 언어 컴퓨터를 실제로 사용하려면 여러 프로그램을 결합해야 하는 경우가 많다. 예) 디렉토리의 모든 로그 파일에서 특정 유형의 오류 메시지를 인쇄 A : 디렉터리의 모든 로그 파일을 나열 B : 목록에서 각 로그 파일을 읽기 C : 해당 유형의 오류 메시지를 찾기 D : 발견된 메시지를 특정 형식으로 인쇄 Glue 언어 스크립팅 언어는 Glue 언어라고 불린다. 목표를 달성하기 위해 여러 프로그램을 함께 연결(Glue) 두 조상 : 쉘/터미널(sh, bash) + 텍스트 처리(sed, awk). 범용 스크립팅 언어 Perl, Python, Ruby, PowerShell, AppleScript 등 웹용 PHP, JSP, Ruby on Rails, JavaScript, TypeScript 등 공통적인..
프로그래밍 언어 패러다임(PL Paradigm) 프로그래밍 언어가 따르는 원칙과 전략 예) 절차적, 명령적, OOP, 기능적, 논리 등 하나의 프로그래밍 언어는 여러 패러다임을 따를 수 있다. Java - 명령형 및 객체 지향 언어 패러다임(Language Paradigms) 프로그래밍 언어를 그룹화하거나 분류하는 방법은 매우 다양하다. 명령형(Imperative) 절차적(procedural) - Fortran, Pascal, Basic, C 객체 지향(object-oriented) - Smalltalk, C++, Java 스크립팅 언어(scripting languages) - Perl, Python, JavaScript 선언형(Declarative) 함수형(functional) 프로그래밍 - Schem..
자료형(Data Types) 데이터 타입은 동일한 유형의 값(value)과 조작할 값에 적용할 수 있는 연산자(operation) 집합이다. 동종(homogeneous) : 같거나 유사한 종류(↔ 이종). 값 + 연산자 : 데이터 타입은 값에 관한 것뿐만 아니라 연산도 포함된다. 예) 정수, 문자열, 배열에 대해 서로 다른 연산이 필요하다. 타입 시스템(Type System) 프로그래밍 언어에는 데이터 유형을 관리하기 위한 자체 타입 시스템(정보 및 규칙)이 있다. 타입 시스템은 일반적으로 다음으로 구성된다. 미리 정의된 타입의 세트 새로운 타입의 정의를 지원하는 메커니즘 동등성 규칙(equivalence rules), 호환성 규칙(compatibility), 타입 추론(type inference)과 같..
고차 함수(Higher-Order) 다음과 같은 경우 함수는 고차로 간주된다. 함수를 매개변수로 받아들인다. 아니면 함수를 반환한다. 이 메커니즘은 많은 프로그래밍 언어, 특히 기능적 언어에서 지원된다. 매개변수로서의 함수 함수를 매개변수로 사용하는 C 코드의 예제 int x = 1; int f(int y) { return x+y; // x = 1 } int g(function h) { int x = 2; return h(3)+x; // x = 2 } int main() { //Functions as parameters int x = 4; int z = g(f); // x = 4 } 함수 f는 g에 매개변수로 전달된다. 변수 x가 여러 번 정의되었다. 함수 g에서 x의 어떤 바인딩을 사용해야 하는가? 이..
매개변수 전달(Parameter Passing) 매개변수 전달은 하위 프로그램이 프로그램의 다른 부분과 통신하는 방법이다. 서브프로그램의 관점에서는 세 가지 종류의 매개변수를 고려할 수 있다. IN 매개변수 : caller에서 callee로 통신 OUT 매개변수 : callee에서 caller로 통신 IN/OUT 매개변수 : 양방향 통신 형식 매개변수(Formal parameters) : 함수의 선언에 나타나는 매개변수 실제 매개변수(Actual parameters) : =인수(arguments), 함수 호출에서 함수에 전달되는 것 Call by Value IN 매개변수에 해당하는 모드 실제 매개변수(인수)는 표현식일 수 있다. 호출 시 실제 매개변수가 계산되고 해당 리턴값(r-value)이 형식 매개변..
컨트롤 추상화(Control Abstraction) 데이터 추상화와 함께 프로그래밍 언어의 가장 중요한 두 가지 개념 중 하나이다. 복잡하고 큰 소프트웨어의 경우 주요 목표나 요구 사항을 달성하는 방법 많은 작은 요구 사항을 충족함으로써 달성 분할, 정복의 개념 모바일 쇼핑 앱을 개발한다고 가정하자. 필요한 기능 제품 데이터를 읽기 앱에 제품 표시 제품 검색 고객정보 관리 제품 리뷰 결제수단 구매 관리 배송 옵션을 관리 하나의 큰 프로그램에서 이러한 모든 것을 구현하는 것은 좋은 생각이 아니다. 대신 각 기능을 독립적으로 제공하는 하위 프로그램(subprograms)을 구현할 수 있다. 구현 세부 사항을 숨기고 이를 디자인과 분리할 수 있다. 다른 구현으로 쉽게 전환할 수 있다. 우리는 서 프로그램을 사..
지난 강좌의 재귀(Recursion)와 꼬리 재귀(Tail Recursion)로 피보나치 수열을 구현해보고 시간을 측정해보자. 먼저 파이썬에서 시간 측정은 time 모듈을 통해 할 수 있다. import time start_time = time.time() . . . end_time = time.time() print(f"exec.time = {end_time-start_time}") 우리는 피보나치 수열에 40을 넣어보고 값을 구할때 까지의 시간을 측정해볼 것이다. 재귀 import time start_time = time.time() def fib(n): if n == 1 or n == 2: return 1 else: return fib(n-1) + fib(n-2) print("fib(40) = ",..
재귀(Recursion) 함수나 프로시저가 본문 내에서 자신을 호출하는 경우 이를 재귀적이라고 한다. 재귀는 튜링 완전성을 얻기 위한 또 다른 메커니즘이다. 재귀는 수학에서 흔히 나타나는데, 이를 귀납적 정의라고도 합니다. n = 1일 때 : factorial(n) = 1 나머지 : n*factorial(n-1) 프로그래밍 언어에서 재귀 재귀는 반복에 비해 비효율적인 것으로 간주되는 경우가 많다. 계속해서 자신을 호출하기 때문이다. 호출할 때마다 새 활성화 레코드를 스택에 푸시하여 매개변수와 반환 값을 저장해야 한다. int fact(int n) { if(n == 1) return 1; else return n*fact(n-1); } 꼬리 재귀(Tail Recursion) 각 재귀 호출에 대한 활성화 기..
파스텔코랄
'프로그래밍언어론' 카테고리의 글 목록