Programming Language 98

[PLT/프로그래밍언어론] 05. Memory Management

Memory Management인터프리터의 주요 기능. 프로그램이 실행되는 동안 다양한 정보(지역변수, 임시값..)가 생성/로드/저장PL에서는 메모리 접근 처리 방법을 결정해야 한다.Subprogram(a.k.a procedure, routine, function)함수, 루틴, 프로시저 다 같은 의미로 사용하겠다. 이론적으로는 반환 값이 있는 것을 subprogram이라고 함.Stack데이터를 쌓는 자료구조. LIFO 구조. 데이터 push/popStack and Procedure스택은 프로시저에 적합하다. 프로시저 또한 LIFO 구조로 호출/종료되기 때문. Env도 이 방식으로 처리 가능Heap(자료구조 아님)힙은 pq나 힙 정렬과 관련된 자료구조이지만, PL에서는 프로그램이 allocated 될 수 ..

[PLT/프로그래밍언어론] 04. Names, Bindings and Scopes

04. Names, Bindings and ScopesName: 단순히 다른 객체를 표현하거나 나타내는 일련의 문자. PL에서는 identifier의 형태name과 object는 같은 것이 아니다. 하나의 이름이 여러 다른 객체, 하나의 객체가 다른 이름을 가질 수 있다.Denotable Object: 이름을 부여할 수 있는 객체들사용자가 부여 : 변수, 매개변수, 함수….PL 부여 : primitive types, primitive operations, pre-defined constnatsBinding: Association(연관성) between a name and a denoted object.다양한 시점에서 생성될 수 있다static : 디자인, 프로그램 작성, 컴파일타임Dynamic : Run..

[PLT/프로그래밍언어론] 03. PL Principle 2

03. Principle 2#PLT이전 시간에 컴파일 Step에 대해 배웠다. 그 중 Syntax Analysis를 자세히 살펴보자.문법 vs. 의미론 vs. 화용론문법(Syntax)은 프로그램의 형식에 관한 것이다.의미론(Semantics)은 프로그램의 의미에 관한 것이다.화용론(Pragmatics)은 특정 맥락에서 프로그램의 의미를 다룬다.예시: 톰과 제리문법:"쥐가 고양이를 차고 있다." ➞ 올바름!"쥐 고양이를 차고 있다." ➞ 잘못됨!의미론:"쥐가 고양이를 차고 있다." ➞ "음, 잠깐만… 뭐라고?"화용론:"쥐는 제리, 고양이는 톰이다." ➞ "아하! 가능하군."문법에 중점세 가지 중, 이 강의에서는 문법에 더 중점을 둔다.다른 것들에 대해 논의하기 전에, 프로그래밍 언어를 어떻게 정의할지 알아..

[PLT/프로그래밍언어론] 02. PL Principle 1

02. Principle 1#PLTComputers and Turing MachineWhat is a Computer?이 강의에서는 PL을 중점으로 다룰 예정이다.우리는 프로그래밍 언어의 크리에이터가 된다고 생각하자.PL을 디자인할 때, 컴퓨터에서 프로그램이 동작하도록 하기 위해 많은 것들을 고려해야 하고, 우리는 이 부분을 중점으로 학습한다.PL의 관점에서 컴퓨터란 무엇인가요?프로그래밍 언어는 결국 컴퓨터에서 실행됩니다.프로그래밍 언어를 설계하거나 프로그래밍 언어로 프로그램을 개발하려면 ➞ 컴퓨터가 어떻게 작동하는지 이해해야 합니다.이 질문을 들으면 컴퓨터에 대한 다양한 이미지가 떠오를 수 있습니다.이번 주 강의에서는 이 질문에 대해 좀 더 이론적으로 살펴볼 것입니다.강의가 끝나면 컴퓨터에 대한 일반적..

[Java] 21. 열거형 - ENUM

열거형 - ENUM#Java열거형이 생겨난 이유문자열로 처리에피소드 : 고객은 3등급으로 나누고, 상품 구매시 등급별로 할인을 적용한다. 할인시 소수점 이하는 버린다.BASIC 10% 할인GOLD 20% 할인DIAMOND 30% 할인만약 if문을 통해서 구현한다면public int discount(String grade, int price) { int discountPercent = 0; if (grade.equals("BASIC")) { discountPercent = 10; } else if (grade.equals("GOLD")) { discountPercent = 20; } else if (grade.equals("DIAMOND")) { discountPercent = 30; } els..

[Java] 20. Wrapper/Class/System/Random 클래스

래퍼, Class 클래스#Java기본형의 한계자바는 객체 지향 언어이다. 그런데 자바 안에 객체가 아닌 것이 있다. 바로 int , double 같은 기본형(Primitive Type)이다.
한계점객체가 아님: 기본형 데이터는 객체가 아니기 때문에, 객체 지향 프로그래밍의 장점을 살릴 수 없다. 예를 들어 객 체는 유용한 메서드를 제공할 수 있는데, 기본형은 객체가 아니므로 메서드를 제공할 수 없다.추가로 객체 참조가 필요한 컬렉션 프레임워크를 사용할 수 없다. 그리고 제네릭도 사용할 수 없다. (이 부분은 뒤에서 설명한다.)null 값을 가질 수 없음: 기본형 데이터 타입은 null 값을 가질 수 없다. 때로는 데이터가 없음 이라는 상태를 나 타내야 할 필요가 있는데, 기본형은 항상 값을 가지기 때문에..

[Java] 19. String 클래스

String 클래스#JavaString 클래스 - 기본char형 배열로 문자열을 관리하기 어려움 String 클래스를 사용한다.문자열을 생성하는 방법은 2가지가 있다.쌍따옴표 사용: ”hello"객체 생성: new String(“hello”)String은 기본형이 아니라 참조형이다.어? 참조형이면 인스턴스의 참조값만 들어갈 수 있는거 아닌가요?String str1 = "hello"; 이게 어떻게 가능하죠? 실제로는 “hello” 대신 new String(“hello”)와 같이 변경되어 동작한다.근데 문자열끼리 덧셈도 가능하지 않나요? 참조형이면 덧셈이 어떻게 가능하죠? 원래는 String이 제공하는 concat()과 같은 메서를 사용해야 하지만, 문자열은 너무 자주 다루어져서 자바에서 편의상 특별..

[Java] 18. 불변 객체

불변 객체#Java갑자기 java.lang에 있는 클래스를 배우다가 “불변 객체”라는 개념이 등장했다. 이 개념이 필요한 이유는 다음 챕터에서 배울 String 클래스가 “불변 객체”이기 때문이다. 먼저 불변 객체가 뭔지 알아보자.공유 : 기본형 vs 참조형기본형: 하나의 값을 여러 변수에서 절대 공유하지 않는다.참조형: 하나의 객체를 참조값을 통해 여려 변수에서 공유할 수 있다.공유 참조와 사이드 이펙트사이드 이펙트 : 프로그래밍에서 어떤 계산이 주된 작업 외에 추가적인 부수 효과를 일으키는 것공유 참조를 잘못하면 사이드 이펙트가 발생할 수 있다. 이를 방지할 수 있는 방법에 대해 알아보자.사이드 이펙트 해결 방안단순하게 서로 다른 객체를 참조해서, 같은 객체를 공유하지 않으면 문제가 해결된다. 그런데..

[Java] 17. Object 클래스

Object 클래스#Javajava.langlang은 Language의 줄임말로써, 자바 언어를 이루는데 기본이 되는 클래스를 모아둔 패키지이다.java.lang 패키지의 대표적인 클래스들Object : 모든 자바 객체의 부모 클래스String : 문자열Integer , Long , Double : 래퍼 타입, 기본형 데이터 타입을 객체로 만든 것Class : 클래스 메타 정보System : 시스템과 관련된 기본 기능들을 제공import 생략 가능모든 자바 application에 java.lang패키지가 자동으로 임포트되서 따로 구문을 적지 않아도 된다.이번 챕터에서는 java.lang 패키지 중 Object 클래스에 대해 알아본다.Object 클래스클래스에 상속 받을 부모 클래스가 없으면, 묵시적으로 ..

[PLT/프로그래밍언어론] Programming Language Principles

Programming Language Principles#PLTComputers and Turing MachineWhat is a Computer?이 강의에서는 PL을 중점으로 다룰 예정이다.우리는 프로그래밍 언어의 크리에이터가 된다고 생각하자.PL을 디자인할 때, 컴퓨터에서 프로그램이 동작하도록 하기 위해 많은 것들을 고려해야 하고, 우리는 이 부분을 중점으로 학습한다.PL의 관점에서 컴퓨터란 무엇인가요?프로그래밍 언어는 결국 컴퓨터에서 실행됩니다.프로그래밍 언어를 설계하거나 프로그래밍 언어로 프로그램을 개발하려면 ➞ 컴퓨터가 어떻게 작동하는지 이해해야 합니다.이 질문을 들으면 컴퓨터에 대한 다양한 이미지가 떠오를 수 있습니다.이번 주 강의에서는 이 질문에 대해 좀 더 이론적으로 살펴볼 것입니다.강의가..