[프로그래밍 언어론] 객체지향 언어 - 상속
·
CS/프로그래밍 언어론
상속 프로그래밍 언어론에 대한 마지막 포스팅이다. 이 포스팅에서는 이전 포스팅에서 알아본 객체지향 언어의 핵심 기능인 캡슐화, 상속, 다형성 중 상속 기능에 대해 알아보자. 이 블로그에 있는 디자인 패턴 포스팅을 몇 개 살펴봤다면 상속 기능에 대해서는 다들 알 것이다. 상속 기능을 이용하면 새로운 클래스를 정의할 때 기존 클래스를 상속받아 새로운 클래스를 정의할 수 있으며, 여기서 기존 클래스는 부모 클래스(parent class)이며 새로운 클래스는 자식 클래스(child class)이다. 이때, 부모 클래스는 슈퍼 클래스(super class), 자식 클래스는 서브 클래스(sub class)라고도 부른다. 상속을 이용해 자식 클래스를 새로 정의하면 자식 클래스는 부모 클래스의 멤버 변수, 메소드를 상..
[프로그래밍 언어론] 객체지향 언어
·
CS/프로그래밍 언어론
객체지향 언어 객체지향 언어의 시작은 Simula - 67로 실세계의 객체를 표현하고 이들 사이 상호작용을 시뮬레이션하기 위한 언어로 개발되었다. 이후 Smalltalk라는 순수 객체지향 언어가 개발되었으며 C에 클래스, 상속, 가상 함수, 추상 클래스, 예외 처리 기능이 추가된 C++ 언어가 등장하였다. 이후 Java라는 강력한 객체지향 언어가 등장하였다. 객체지향 언어의 목적은 실생활의 객체를 프로그램으로 표현하고 이들 사이의 상호작용을 시뮬레이션하기 위함이었다. 객체지향 언어의 객체는 실세계의 사물 / 물체를 나타내는 데 사용된다. 객체란 그 객체의 속성(attribute)와 객체의 행동(behavior)로 이루어진다. 속성은 객체의 상태 / 데이터를, 행동은 이 객체가 할 수 있는 연산 / 동..
[프로그래밍 언어론] 예외의 처리
·
CS/프로그래밍 언어론
예외 예외(Exception)란 치명적이지 않은 오류, 비정상적 상황이라 할 수 있다. Java로 프로그램을 설계하거나 PS 문제를 풀어본 경험이 있다면 사실 익숙할 것이다. 프로그램에서 예외가 발생하면 이것을 처리하고 계속 수행하도록 해야 하며, 예외를 처리하지 못하면 프로그램은 종료된다. 따라서 예외를 적절히 처리해야 하는데, 예외를 처리하려면 다음 기능이 필요하다. 1. 예외 정의 - 새로운 예외를 정의할 수 있는 기능2. 예외 발생 - 예외를 발생시킬 수 있는 문장3. 예외 처리 - 예외를 처리하기 위한 문장 예외 처리 모델 예외 처리 모델에는 재개 모델, 종료 모델이 있다. 이 두 모델의 차이는 예외가 발생한 경우, 이후의 프로그램 실행 흐름에 있다. 아래 코드를 통해 재개 모델과 종료 모델의 ..
[프로그래밍 언어론] 함수의 타입 규칙
·
CS/프로그래밍 언어론
유효범위 규칙 변수를 선언할 때에도 유효범위 규칙이 적용되었다. 선언된 이름(식별자)의 유효범위는 선언된 이름이 유효한 프로그램의 범위, 영역을 의미한다. 변수 이름 이외에 함수 이름에도 유효 범위가 있다. 유효 범위를 정하는 규칙에는 정적 유효범위 규칙과 동적 유효범위 규칙이 있다. 정적 유효범위 규칙은 선언된 이름은 선언된 블록 내에서만 유효하다는 것이며, 동적 유효범위 규칙에서는 선언된 이름은 선언된 블록의 실행이 끝날 때 까지 유효하며 실행 경로에 따라 유효범위가 달라질 수 있다. int x = 0;fun void g(int y) x = x + y * y; fun void f(int z) let int x = 10; in g(z); print x; end; f(5);print x..
[프로그래밍 언어론] 함수와 매개변수 전달
·
CS/프로그래밍 언어론
함수 프로그래밍에서 함수는 인자를 통해 입력을 받고(인자가 없는 경우도 있지만), 이를 함수 내부 문장을 통해 처리해 결과를 반환한다. 프로그래밍 언어에서 함수에 리턴 값이 없다면 이를 프로시저(Procedure)라 한다. 프로시저는 일련의 계산 과정을 추상화한 개념으로 리턴 값이 없는 대신 매개변수나 비지역 변수를 변경함으로써 계산 결과를 나타낸다. 언어 S의 함수와 관련된 구문을 살펴보자. -> | | -> fun id( ) -> ... | id( {, } ); | return ; -> ... | id( {, } ) 이중 id( {, } );은 함수 호출을, return ;은 우리에게 익숙한 리턴문이다. 마지막으로 에 기술된 문장은 함수 정의 구문이다. 하나씩 살펴보자. 의 함..
[프로그래밍 언어론] 타입 시스템
·
CS/프로그래밍 언어론
타입 오류 앞선 포스팅을 통해 여러 언어의 타입 검사 방식에 대해 알아보았는데, 몇몇 언어는 타입 검사를 통과하지 못하면 타입 오류가 발생해 프로그램을 실행하지 않았다. 이것은 코드가 문법에는 오류가 없지만 내용적 측면에 오류가 있기 때문인데, 코드에 문법적인 문제는 없으므로 Parser에서 해당 오류는 검출되지 않는다. . 내용적 측면에서 발생할 수 있는 오류는 여러 가지가 있으며, 이중 수식이나 문장 등이 타입에 맞지 않게 잘못 사용되는 것을 타입 오류(Type Error)라 한다. 타입 오류의 정확한 정의는 다음과 같다. 타입 오류는 프로그램 실행 중 수식, 문장, 함수 등의 프로그램 구성 요소가 타입에 맞지 않게 잘못 사용되어 발생하는 오류이다. int 타입 변수에 논리 부정 연산 !을 적용하는 ..
[프로그래밍 언어론] 타입과 언어의 분류
·
CS/프로그래밍 언어론
언어의 타입 프로그램에서 변수의 타입이 언제 결정되는지에 따라 언어를 정적 타입, 동적 타입 언어로 구분할 수 있다. 변수의 타입이 컴파일 시간에 결정되어 고정된다면 정적 타입 언어이며, 변수의 타입이 고정되지 않고 실행 중에 변하는 언어를 동적 타입 언어라 한다. 정적 타입 언어에는 Java, C, C++, FORTRAN, Pascal, Scala 등이, 동적 타입 언어로는 Perl, Python, Scheme, JavaScript 등이 있다. 정적 타입 언어는 변수 타입이 컴파일 시간에 결정되어 고정되므로 타입 검사 역시 컴파일 시간에 이루어지는 반면, 동적 타입 언어는 변수 타입이 실행 중에 변할 수 있으므로 타입 검사는 인터프리터에 의해 실행 중에 이루어진다. 강한 타입, 약한 타입 타입 사용 ..
[프로그래밍 언어론] 자료형
·
CS/프로그래밍 언어론
자료형 프로그램에서 표현하고 저장하는 데이터에는 여러 종류가 있다. 이 데이터의 종류, 유형을 자료형(Data Type)이라 한다. 자료형의 정의는 다음과 같다. 자료형은 값들의 집합과 이 값들에 대한 연산들의 집합이다. 선언문 int x;에 대해 생각해 보자. 여기서 자료형은 int이고, int 타입은 이 타입의 변수가 가질 수 있는 값들의 집합을 의미한다. 기본 자료형 자료형은 값들의 타입을 의미한다. 기본 자료형(Basic Type)이란 더 이상 쪼갤 수 없는 값들로 구성된 자료형을 말하며, 빌트인(built - in) 기본 자료형과 사용자 정의(user defeined) 기본 자료형으로 나눈다. 빌트인 기본 자료형은 프로그래밍 언어에 의해 사전 정의된 기초 자료형이며, 예시로 boolean,..