인류의역사를공부하면현재와미래의우리삶을더잘이해할수있듯이, 프로그래밍언어 설계의역사를살펴보면프로그래밍언어에대해서더잘이해할수있을것이다 년대 - 폰노이만머신, 어셈블리언어, Fortran 진공관컴퓨터의출현 : 튜링머신Turing machine을진공관을이용하여현실화함

Similar documents
Microsoft PowerPoint - chap01-C언어개요.pptx

<4D F736F F D20C0CCBEBEC1A6BEEE5FC3A5BCD2B0B35F >

1 처리능력 (Throughput) : 일정시간내에시스템이처리하는일의양 2 반환시간 (Turnaround time) : 시스템에작업을의뢰한시간부터처리가완료될때까지걸리는시간 3 사용가능도 (Availability) : 시스템을사용할필요가있을때즉시사용가능한정도 4 신뢰도

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

Microsoft PowerPoint - 00_(C_Programming)_(Korean)_Computer_Systems

3차시.ppt

프입2-강의노트-C++배경

프로그래밍 Company 서울대학교통계학과 2010년 2학기컴퓨터의개념및실습 ( 1

Frama-C/JESSIS 사용법 소개

PowerPoint Presentation

<342EBAAFBCF620B9D720B9D9C0CEB5F92E687770>

ThisJava ..

Microsoft PowerPoint - C프로그래밍-chap00.ppt [호환 모드]

제8장 자바 GUI 프로그래밍 II

C 언어와 프로그래밍 개요

Chap 6: Graphs

17장 클래스와 메소드

chap x: G입력

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

1

Microsoft PowerPoint - a.pptx

슬라이드 1

제4장 기본 의미구조 (Basic Semantics)

설계란 무엇인가?

Microsoft PowerPoint - chap06-2pointer.ppt

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

untitled

슬라이드 1

Microsoft PowerPoint - 1C언어소개0.PPT

PowerPoint Presentation

JVM 메모리구조

(Microsoft PowerPoint - \273\365 Microsoft Office PowerPoint \307\301\267\271\301\250\305\327\300\314\274\307.pptx)

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

DBMS & SQL Server Installation Database Laboratory

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

Microsoft PowerPoint 웹 연동 기술.pptx

슬라이드 1

1~10

SNU =10100 =minusby by1000 ÇÁto0.03exÇÁto0.03exÇÁ=10100 =minusby by1000 ·Îto0.03ex·Îto0.03ex·Î=10100 =minusby by1000

레프트21

CH05) 소프트웨어개요 컴퓨터일반 1- 소프트웨어개념및구분 1) 소프트웨어의개념 컴퓨터전체를작동시키거나사용자가컴퓨터를이용하여특정업무를처리할수있게개발된프로그램 2) 소프트웨어의구분 시스템소프트웨어 제어프로그램 감시프로그램 작업관리프로그램 데이터관리프로그램 처리프로그램

PowerPoint 프레젠테이션

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

<BFACBDC0B9AEC1A6C7AEC0CC5F F E687770>

PowerPoint 프레젠테이션

슬라이드 1

슬라이드 1

자연언어처리

C++ Programming

Microsoft PowerPoint - ch07 - 포인터 pm0415

어댑터뷰

슬라이드 1

쉽게 풀어쓴 C 프로그래밍

<C6F7C6AEB6F5B1B3C0E72E687770>

adfasdfasfdasfasfadf

저작자표시 - 비영리 - 변경금지 2.0 대한민국 이용자는아래의조건을따르는경우에한하여자유롭게 이저작물을복제, 배포, 전송, 전시, 공연및방송할수있습니다. 다음과같은조건을따라야합니다 : 저작자표시. 귀하는원저작자를표시하여야합니다. 비영리. 귀하는이저작물을영리목적으로이용할

Microsoft PowerPoint - 권장 사양

<5B DB1B3C0B0C0DAB8A65FC0A7C7D15FB5F0C0DAC0CEBBE7B0ED5FC5F8C5B62E706466>

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

The Pocket Guide to TCP/IP Sockets: C Version

ISP and CodeVisionAVR C Compiler.hwp

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE

C언어 및 실습 C Language and Practice

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap10-함수의활용.pptx

자료형 크기 값의범위 접미문자 Byte형 1바이트 0~255까지 없음 Boolean형 2바이트 True, False 없음 Integer형 2바이트 ~ 32767까지 % Long형 4바이트 -2,147,483,648 ~ 2,147,483,648까지 & Sin

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Secure Programming Lecture1 : Introduction

Microsoft Word - PLC제어응용-2차시.doc

슬라이드 1

금오공대 컴퓨터공학전공 강의자료

프로그래밍언어 컴퓨터정보과권용광 CONTENT 1. 컴퓨터언어와프로그래밍의개념 2. 프로그래밍과정과컴퓨터언어의계층 3. 프로그래밍언어의발달과정과분류 4. 프로그래밍코딩의실제예 컴퓨터언어와프로그래밍의개념 프로그래밍과정과컴퓨터언어의계층구조 프로그래밍언어

PowerPoint 프레젠테이션

예외 예외정의예외발생예외처리예외전파 단정 단정의선언 단정조건검사옵션 2

저작자표시 - 비영리 - 변경금지 2.0 대한민국 이용자는아래의조건을따르는경우에한하여자유롭게 이저작물을복제, 배포, 전송, 전시, 공연및방송할수있습니다. 다음과같은조건을따라야합니다 : 저작자표시. 귀하는원저작자를표시하여야합니다. 비영리. 귀하는이저작물을영리목적으로이용할

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

PowerPoint Presentation

PowerPoint 프레젠테이션

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

저작자표시 - 비영리 - 변경금지 2.0 대한민국 이용자는아래의조건을따르는경우에한하여자유롭게 이저작물을복제, 배포, 전송, 전시, 공연및방송할수있습니다. 다음과같은조건을따라야합니다 : 저작자표시. 귀하는원저작자를표시하여야합니다. 비영리. 귀하는이저작물을영리목적으로이용할

Microsoft PowerPoint 산업전망_통장전부_v9.pptx

PowerPoint Template

Microsoft PowerPoint - MonthlyInsighT-2018_9월%20v1[1]

PowerPoint Template

PowerPoint Presentation

SNU =10100 =minusby by1000 ÇÁto0.03exÇÁto0.03exÇÁ=10100 =minusby by1000 ·Îto0.03ex·Îto0.03ex·Î=10100 =minusby by1000 ±×to0.

SNU =10100 =minusby by1000 ÇÁto0.03exÇÁto0.03exÇÁ=10100 =minusby by1000 ·Îto0.03ex·Îto0.03ex·Î=10100 =minusby by1000 ±×to0.

11장 포인터

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다

gnu-lee-oop-kor-lec06-3-chap7

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

PowerPoint 프레젠테이션

C++ 기본문법 정리

Microsoft PowerPoint - PL_03-04.pptx

SNU =10100 =minusby by1000 ÇÁto0.03exÇÁto0.03exÇÁ=10100 =minusby by1000 ·Îto0.03ex·Îto0.03ex·Î=10100 =minusby by1000

3. 다음은카르노맵의표이다. 논리식을간략화한것은? < 나 > 4. 다음카르노맵을간략화시킨결과는? < >

Microsoft PowerPoint - ch01.ppt

게시판 스팸 실시간 차단 시스템

Transcription:

ENE414 프로그래밍언어론강의노트 1 프로그래밍언어설계의역사 한양대학교 ERICA캠퍼스컴퓨터공학과도경구 2012년 1학기 (version 0.1) 1 c David A. Schmidt, 도경구 (2012). 본문서는 David A. Schmidt 교수의강의노트 Introduction to Programming-Language Paradigms* 를한양대학교 ERICA캠퍼스컴퓨터공학과학부 3학년프로그래밍언어론강의용으로번역하여개작하였습니다. 강의이외의용도로원저자및번역개작자의허락없이무단복제하여배포할수없습니다. (*http://people.cis.ksu.edu/~schmidt/505f11/lectures/home.html)

인류의역사를공부하면현재와미래의우리삶을더잘이해할수있듯이, 프로그래밍언어 설계의역사를살펴보면프로그래밍언어에대해서더잘이해할수있을것이다. 1950 년대 - 폰노이만머신, 어셈블리언어, Fortran 진공관컴퓨터의출현 : 튜링머신Turing machine을진공관을이용하여현실화함. 진공관끼리선을연결하는작업자체가프로그래밍 존폰노이만John von Neumann이괴델Goedel의이론에서영감을얻어프로그램을수로표현하여메모리에저장하여실행시킴 기계어의출현. 어셈블리언어는기계어에이름을붙인것에불과함. 어셈블러는어셈블리프로그램을기계어로번역함 IBM의존백커스John Backus가과학자들이풀문제를수식으로쓰면이를컴퓨터가계산할수있도록하는 자동프로그래밍언어 를개발함 - Fortran(FORmula TRANslator). 프로그램을읽고어셈블리언어로번역하는파서와컴파일러를개발함. 대성공!! 비즈니스에사용할수있는 자동프로그래밍언어 로 COBOL(COmmon Business-Oriented Language) 이이어서개발됨. 1960년대 - 문법, 블록구조, 시스템언어, 파싱기술, 컴파일기술, 실행의미론 50년대후반, 유럽의컴퓨터학자들이위원회를조직하여모여서스택stack이라는새로운개념의자료구조를이용하여새로운언어 Algol60를설계함. 혁신포인트는 문법으로구문을정의함. 노암촘스키Noam Chomski가가찾아낸아이디어였으나, 존백커스가개별적으로실용화하였음 블록구조를사용하여변수를국지적으로사용하게함으로써실행중자동메모리관리가능하게함 자신을호출하는재귀프로시저개념 코펜하겐의피터나우어Peter Naur는프로그래밍언어의의미가정의된문서를작성함. 최초로의미를귀납적으로설명함. Algol은혁신적인언어였으며버로우Burroughs회사에서스택머신을만들어상용화하였으나 IBM의마케팅에밀려빛을보지못함. 하드웨어를동작하기위한운영체제등의시스템을만들기위해서유용하게사용할어셈블리같은언어들이지속적으로개발됨. 캠브리지와옥스포드대학의크리스토퍼스트라치Christopher Strachey의 CPLCommon Programming Language, 에서출발하여, BCPL, B, C가차례로개발됨. 1

파서와번역기연구가활발하게진행됨. 문법으로구문을정의하고, 이를기반으로파서를제작하고검증함. 파서가만들어내는파서트리를입력으로받아서번역기는의미를계산하여출력을내줌. 따라서인터프리터라고불렀음. 출력이컴퓨터에서실행할수있는기계어코드또는어셈블리코드인경우컴파일러라고헸음. 문법을분류하는연구가활발하게이루어졌으며결과로 LL(k), LR(k) 과같은특정성질을가진문법들로분류하였으며이특징을이용한하향식, 상향식파싱알고리즘이개발됨. 도날드크누스Donald Knuth가주도하였음. 그이후, 문법을입력으로받아서파서를자동으로생성하주는퍼서생성기출현. 프로그램이어떻게실행되는지도표현할수있어서언어의프로토타입의제작이가능했음. 실용성은아주미약 언어의의미를귀납적으로정의하여그언어의프로그램이직접실행되는가상머신개발시작. 대표적으로비엔나의 IBM 연구소에서디네스비요너와크리프존스가주도하여개발한 Vienna Definition Language. 프로그래밍언어의실행의미를표현해주는최초의가상머신이었음 MIT에서존맥카시John McCarthy는자연어처리를용이하게할수있는언어개발에착수. 리스트자료구조를만들고이와알론조처치Alonzo Church의람다계산법lambda calculus을응용하여 LISP (LISt Processing language) 를설계하고구현함. 이언어를전용으로실행하는 LISP 머신이개발되었으나상업적으로성공하지는못함. 이후인공지능언어로널리사용됨 프로그램을수학과논리학적인엔티티로표현된지식을변환기로인식하기시작하면서, 지식을 주장 (assertion) 으로표현하며, 프로그램의실행은이지식을변환하는과정으로이해하게됨. 로버트플로이드Robert Floyd와토니호어Tony Hoare가주도한공리적의미론axiomatic semantics으로발전하였으며, 이후명세과검증을엄밀하게할수있게되는기초를닦음. 하지만언어를어떻게설계하고구현하는지에대해서알아내기기불가능. 1970 년대 - 가상기계, SLR/LALR 문법, 표시적의미론, 함수중심언어 프랭크드레머Frank DeRemer가 SLR(k) 언어를찾아내고후속타 LALR(k) 언어가발견됨으로써파서제작문제는완전히풀렸다. 그결과지금은 Yacc, ANTLR과같은파서생성도구를사용하여문법만가지고파서를자동으로생성할수있음 Algol60 설계위원회출신들이연구를계속해서괄목할만한결과들을내놓았다. 크리스틴나이가드Kristin Nygaard는 Simula67을설계했고, 니클라우스워스Nicklaus Wirth는 Pascal과 Modula를설계했다. Simula는최초의객체지향언어이다. Pascal는체계적인데이터타입을최초로제공한언어였고, 가상머신의개념을최초로도입하여컴파일러의표준화를시도하였다. 가상머신코드를해당 CPU의기계어로번역하는어셈블러만만들어서포팅하면컴파일러하나로여러 CPU에사용이가능하였다. 이개념은결국 Java에적용되어 2

성공에크게이바지한셈이되었다. C 부류언어의시조인클리스토퍼스트라치Christopher Strachey는타겟머신이나가상머신과는상관없이언어의의미를기술할수있어야한다고생각했다. 프로그램은입력을받아서출력을내주는함수를뜻하므로그렇게표현할수있으리라스트라치는믿었다. 마침내수학적함수로표현하기위해서알론조처치Alonzo Church 교수의람다표기법lambda calculus 을채택하고, 프로그램구절을수학적의미로귀납적으로정의할수있었다. 이기술을표시적의미론denotational semantics이라고한다. 오토마타이론과직관수학의선구자인다나스캇Dana Scott은스트라치와함께스트라치의함수가계산하는계산값의래티스lattice 구조를정의했다. 표시적의미론은언어분석분야의엄청난연구를유발시켰다. 수학에서유래된증명기술이프로그램과언어에대한정확성에대해서증명하는데사용가능했기때문이다. 람다표기법자체를프로그래밍언어로사용하는연구도촉발시켰다. 그결과로함수중심언어인 ML, CAML, OCAML, Haskell과같은언어들이탄생했다. 이부류의언어의특징은루프와값이변경되는변수가없다는것이다. 계산은모두 ( 재귀 ) 함수호출과파라미터전달로이루어진다. 스트라치와같은시기에도날드크누스Donald Knuth는파스트리의마디에그부분에해당하는의미 ( 속성attributes이라고함 ) 를부착하여프로그램의의미를표현할수있다는사실을발견하였다. 이렇게속성이부착된문법을속성문법attribute grammar이라고하며, 프로그램전체의의미는해당파스트리의하위트리의미를조합하여결정하도록하였다. 이포맷은수학함수나특정타겟코드와도연관이없지만, 스트라치의귀납적정의를이용하여소스코드를타겟코드또는의미로의번역을자연스럽게표현할수있다. 1980 년대 - 컴포넌트언어, 객체지향모델, 논리 = 알고리즘, 의미계산법 분산시스템의필요성과그래픽장비의출현으로소프트웨어가대형화해가기시작했다. 이에맞추어소프트웨어개발이부품을조립하여조립하는형태가되면서이를지원하는 Modula, Ada, Euler가설계되었다. 부품이결합하면서이름충돌이나부품의규격이맞지않아재사용이힘들게될수있다. 이런부류의문제를해결하기위해서이름붙이기, 수입import, 가시거리, 영역scope과관련된연구가활발해지기시작했다. 소형프로그램부품 끼리서로계산기능을공유하고상호협조하면서계산을하도록하는연구도진행되고있었다. 행위자actor라고하는의미모델이구상되었고, Smalltalk은이러한개념에영감을받아서개발된언어이다. Smalltalk에서는이행위자를객체objects 라고하였으며, 이리하여객체지향프로그래밍object-oriented programming이시작되었다. 또한메시지전달과이벤트처리를통하여 GUIgraphic user interface 조립을자연스럽게할수있어야한다는요청사항도 Smalltalk 언어를설계하는데영향을끼쳤다. 3

논리식으로작성된명세에맞게소프트웨어가작성되었는지를보증하기위해서프로그램의개발에 ( 직관적 ) 서술논리를적용시키는연구가활발히이루어졌다. 직관논리intuitionistic logic의관점에서보면, 명세는데이터타입이고, 프로그램의실행이명세를만족하게되면그명세가바로정확히프로그램의타입이된다. 놀라운점은직관논리를사용하여명세에대한증명을만들면, 그증명이바로프로그램코드가된다는사실이다! 이발견을실제소프트웨어에실현시키려면갈길이멀지만, 실현되는경우얻게되는이득은실제로상당히클것이다. 특히안전제일시스템이나보안시스템에이를적용시키려는노력은지금까지도계속되고있다. 개발된관련논리시스템은 Intuitionistic Type Theory, nuprl, LCF 등이있고, 관련프로그램증명도구로는 NuPRL, LCF, HOL, Isabelle, Coq 등이있다. 논리학이컴퓨팅에적용되사례는또있다. 말그대로 명세를실행하자 이다. 이경우명세가주어지면그명세를증명하는 증명 을찾는작업을수행하게된다. 이결과탄생한대표적인언어가 Prolog이다. Prolog 인터프리터는혼절논리식Horn-clause logic에대에대하여 Alan-Robinson 발견한해법을사용하는정리증명기이다. Prolog는전통적인문제뿐만아니라인공지능과데이터베이스분야의문제를해결하는데많이사용되고있다. 1990 년대 - 도메인특화언어, 소프트웨어구조, 추론기반의미론 특정응용분야전용언어가개발되는빈도가점점많아지기시작했다. GUI 구축용언어, 표계산spreadsheet 언어, 웹문서작성언어, 네트워킹프로그램, 수학계산용언어등특정분야에특화된언어를도메인특화언어domain-specific language라고하며, 지금도계속발전하고있다. 도메인특화언어로개발되었으나실패한언어중의하나가 Java이다. Java는원래 Smalltalk 에서쓰는것과같은객체를처리하는프로그램을내장된칩에장착하기위해서개발되었다. 이후에웹언어로도사용할수있도록확장했는데, 애플릿applets이라는객체를웹으로보내서웹브라우저에서실행되게하였다. Java는가상머신에서돌아가도록만들었기때문에포팅을하고웹브라우저에심기가쉽어서 Smalltalk의실용적인대안으로각광을받기시작했다. 객체지향프로그래밍을처음배우는등용문역할도잘해냈다. 당시유일한대안은기존의 C언어에다객체지향을복잡하게장착한 C++ 뿐이었다. 분산계산또는동시계산을수행하는언어는스캇과스트라치의표시적의미론으로분석하기힘들었다. 어딘버러대학의고든플롯킨Gordon Plotkin과프랑스 INRIA의질레칸Gilles Kahn은계산이실행하는방식을자연추론형태의증명규칙으로표현하기를제안하였다. 이를실행과정의미론operational semantics이라고하는데큰걸음big-step 표현방식과작은걸음small-step 표현방식으로나뉜다. 가상머신이있다고가정을해야하고, 프로그램의실행성질을증명하기그리간단하지않다. 하지만분산, 비결정성, 동시성을표현하기좋은장점은가지고있다. 이외에도프로그램의의미를표현하기위한메타언어meta-language인전통적인람다계 4

산법대신밀너Milner의 CCS, 아바디와카델리Abadi-Cardeli의객체계산법object calculus, 프로세스대수Process Algebra 등이제안되었다. 소프트웨어구조를표현하기위한그림언어 ( 가장유명한건 UML) 가유명해졌다. 의미가불분명한점이있어다소혼란이있지만의미를고정하기위한노력들이이루어지고있다. 2000 년대 - 정적분석, 프로그램검증, 보안, 안전제일애플리케이션 C# 과같은대규모언어와 Ajax, XML과같은소규모언어가계속적으로나타나고있다. 최근에는의미론을응용한분석기법을사용하여프로그래머가정확한코드를작성하게도와주는도구를개발하는쪽으로많은연구가이루어지고있다. JMLJava Modelling Language, Spec#, Coq과같은도구들은서술논리학predicate logic 또는요약해석abstract interpretation 이론을기반으로개발되었다. 요약해석이란프로그램을실제입력값이아닌요약값으로돌리는기술을말한다. 에필로그 새로운언어는필요에의해서개발된다. 예를들면, Fortran은물리학자들이세운식을프로그램하게도와주기위해서개발되었다. Simula는시뮬레이션을하기위해서개발되었고, Pascal은이동성을목표로개발되었고, C 언어는시스템프로그래밍용으로개발되었고, Java는내장시스템에쓰려고개발되었다. 도메인특화언어로보면사례가훨씬더많이있다. Javascript, Matlab, HTML, CSS, SQL, Ajax... 특정응용프로그램분야에서작업을할때, 그분야에특화된언어가있으면편할것이다. 별로맞는걸찾지못하면아마도하나만들고싶어질지도모른다. 언어는한사람이독자적으로설계하거나, 아니면비전을공유하고있는소규모팀이설계한다. 설계자는해당응용분야와실행 ( 하드웨어 ) 프랫폼을잘이해하고있어야한다. 보통설계자는언어를구현해본사전경험이있다. 실행프랫폼부터선정해야한다. 실행머신이될수도, 가상머신이될수도있을것이다. 결국프로그래밍언어는기계를돌리기위한것이니어쩌면당연한일이다. 설계하는그언어를사용하든지 ( 부트스트래밍bootstrapping이라고함 ) 아니면다른언어를사용하여인터프리터형식으로프로토타입을만들어본다. 프로토타입으로좀테스트를해본후만족하면본격적으로효율적인구현에들어간다. 정형의미론기술은일반적으로설계개발단계에서는덜사용되고, 사후문서화또는분석용으로주로사용된다. 이강의의막바지에소규모도메인특화언어를설계하고구현해보도록할것이다. 실제로이러한소규모언어는소프트웨어개발하면서빈번히새로만들어지고사용된다. 5