본문 바로가기
카테고리 없음

프로그래밍 언어, IDE, 프레임워크, 라이브러리

by 태윤2 2021. 3. 19.

 

프로그래밍 언어

프로그래밍 언어는 컴퓨터를 이용하여 특정 문제를 해결하기 위한 프로그램을 작성하기 위해 사용되는 언어입니다. 프로그래밍 언어는 일반적으로 저급언어(기계어, 어셈블리어)와 고급언어(컴파일러 언어) 로 분류 할 수 있습니다.

 

저급 언어(Low Level Language)는 기계어와 어셈블리어로 구분됩니다.

 

기계어

컴퓨터가 직접 이해할 수 있는 언어

012진수 형태로 표현되며 수행시간이 빠르다.

CPU에 내장된 명령들을 직접 사용하는 것으로, 프로그램을 작성하고 이해하기가 어렵다.

기종마다 기계어가 다르므로 언어의 호환성이 없다.

어셈블리어

기계어와 1:1로 대응되는 기호로 이러우진 언어로, 니모닉(Mnemonic) 언어 라고도 한다.

하드웨어 제어에 주로 사용되며, 언어의 호환성이 없다.

컴퓨터가 직접 이해할 수 없으므로 어셈블리어로 작성된 프로그램은 어셈블러를 사용하여 기계어로 번연해주어야 한다다.

고급언어

고급언어(High Level Language)는 컴파일러 언어 라고도 하며, 인간이 실생활에서 사용하는 자연어와 비슷한 형태 및 구조를 가지고 있다.

하드웨어에 대한 깊은 지식이 없어도 프로그램 작성과 수정이 용이하다.

컴퓨터가 이해할 수 있는 기계어로 번역하기 위해 컴파일러나 인터프리터가 사용된다.

기계어와 어셈블리어를 제외한 C, JAVA, Python등의 언어가 고급언어에 해당된다.

 

 

 

컴파일러와 인터프리터는 고급언어로 작성된 원시 프로그램(Source Program)을 목적 프로그램(Object Program)으로 번역하는 번역 프로그램이며, 프로그램 번역 방식에 따라 구분된다.

 

컴파일러 와 인터프리터

 

컴파일러

컴파일러는 고급 언어로 작성된 프로그램 전체를 목적 프로그램으로 번연한 후, 링킹 작업을 통해 컴퓨터에서 실행 가능한 실행 프로그램을 생서합니다.

번역 실행 과정을 거쳐야 하기 때문에 번역 과정이 번거롭고 번역 시간이 오래 걸리지만, 한번 번역한 후에는 다시 번역하지 않으므로 실행 속도가 빠르디ㅏ.

컴파일러를 사용하는 언어에는 C언어 Java 등이 있습니다.

인터프리터

인터프리터는 고급 언어로 작성된 프로그램을 한 줄 단위로 받아들여 번역하고, 동시에 프로그램을 한 줄 단위로 즉시 실행시키는 프로그램입니다.

프로그램이 직접 실행되므로 목적 프로그램은 생성되지 않습니다.

줄 단위로 번역, 실행되기 때문에 시분할 시스팀에 유용하며 원시 프로그램의 변화에 대한 반응이 빠르다.

번역 속도는 빠르지만 프로그램 실행 시 매번 번역해야 하므로 실행 속도는 느리다.

인터프리터를 사용하는 언어에는 Python, BASIC, SNOBOL, LISP, APL등이 있다.

구분

컴파일러

인터프리터

번역단위

전체

()

목적 프로그램

생성함

생성하지 않음

실행속도

빠름

느림

번역속도

느림

빠름

관련언어

C,JAVA

Python, BASIC, LISP, APL, SSNOBOL

 

 

 

IDE(통합 개발 환경 Intergrated Development Environment)는 코딩, 디버그, 컴파일, 배포 등 프로그램 개발에 관련된 모든 작업을 하나의 프로그램 안에서 처리하는 환경을 제공하는 소프트웨어이다. 종래의 소프트웨어 개발에서는 컴파일러, 텍스트 편집기, 디버거 등을 따로 사용했다. 이러한 프로그램들을 하나로 묶어 대화형 인터페이스를 제공한 것이 통합 개발 환경이다. 최근의 통합 개발 환경(IDE)은 그래픽 사용자 인터페이스(GUI) 응용 프로그램 개발용 고속 개발 도구가 많다.

일반적으로 IDE는 다음과 같은 요소로 구성되어 있습니다.

소스 코드 편집기: 시각적 신호를 활용한 구문(Syntax) 강조와 같은 기능을 포함하여 소프트웨어 코드를 작성하도록 돕는 텍스트 편집기로서, 언어별 자동 완성 기능과 코드 작성 중 버그 검사를 제공한다.

로컬 빌드 자동화 : 컴퓨터 소스 코드를 바이너리 코드로 컴파일링하고, 바이너리 코드를 패키징하고 자동화 테스트를 실행하는 등 간편하고 반복 가능한 태스크를 개발자가 사용하는 소프트웨어의 로컬 빌드를 생성할 때 자동화해주는 유틸리티.

디버거 : 원본 코드에 있는 버그 위치를 그래픽으로 표시할 수 있는 다른 프로그램을 테스트하는 프로그램.

 

IDE를 사용하는 이유는 무엇일까?

제일 큰 이유는 시간 절약 이다. IDE의 기능 대부분은 전체 문자열을 입력하지 않아도 되는 지능형 코드 완성 및 자동화된 코드 생성과 같이 시간절감을 위한 기능이다.

IDE는 코드가 작성된 대로 구문 분석하여 실수로 인한 버그를 실시간으로 식별할 수 있고, 구문 강조 또한 대부분의 IDE에서 공통된 기능으로, 시각적 신호를 사용하여 텍스트 편집기에서 문법을 구별 한다.

 

IDE 유형

IDE의 다양한 기술 및 비즈니스 활용 사례가 있으며, 이는 마찬가지로 독점 및 오픈소스 IDE 옵션도 많다는 의미다. 읿반적으로 IDE 간의 가장 중요한 차별화 특징은 다음과 같다.

지원되는 언어의 수: 일부 IDE는 하나의 언어만 지원하여 특정 프로그래밍 패러다임에 더욱 적합하다. 그예인 IntelliJ는 주로 JavaIDE로 알려져 있다. 다른 IDEJava,XML,Python 등을 지원하는 Eclipse IDE와 같이 한 번에 광범위한 언어를 지원한다.

지원되는 운영 체제(OS) : 개발자의 운영 체제에 따라 실행 가능한 IDE가 제한되며(클라우드 기반 IDE인 경우 제외), 개발 중인 애플리케이션이 특정 운영 체제(Android 또는 iOS)를 사용하는 최종 사용자를 위한 애플리케이션인 경우 추가적인 제약을 받는다.

자동화 기능 : 대부분의 IDE가 텍스트 편집기, 빌드 자동화 및 디버거라는 3가지 주요 기능을 포함하지만, 많은 IDE는 리팩토링, 코드 검색 및 지속적인 통합 및 지속적인 배포(CI/CD) 툴과 같은 추가 기능도 지원한다.

시스템 성능에 미치는 영향 : 개발자들이 메모리 사용량이 많은 다른 애플리케이션을 동시에 실행하고자 하는 경우 IDE의 메모리 공간이 중요할 수 있다.

플러그인 및 확장기능: 일부 IDE는 개발자들의 요구 사항 및 선호 사항에 맞춰 워크플로우를 커스텀마이징하는 기능을 포함한다.

 

 

 

 

프레임워크

 

프레임워크는 어떠한 목적(개발)을 달성하기 위해 복잡하게 얽혀있는 문제를 해결하기 위한 구조며, 소프트웨어 개발에 있어 하나의 뼈대 역할을 한다.

프로그래밍에서 특정 운영체제를 위한 응용 프로그램 표준 구조를 구현하는 클래스와 라이브러리 모임이다.

 

전체 시스템의 통합성, 일관성 때문에 개발자의 자유를 제한 하기 위해 도입됨 : 개발에 대한 방법론을 강제 하는 것

자유롭게 설계하고 코딩을 하는 것이 아니라 프레임워크가 제공하는 가이드대로 설계하고 코딩해야 함

재사용할 수 있는 수많은 코드를 프레임워크로 통합함으로써 개발자가 새로운 애플리케이션을 위한 표준 코드를 다시 작성하지 않아도 된다.

거대하고 복잡도가 높은 프로젝트를 하기 위해 필요한 많은 개발자들이 통일성 있게 빠르고 안정적으로 개발할 수 있음

생산성 향상 및 높은 안정성

 

프레임워크의 특징

모듈화(modularity)

  • 프레임워크는 구현을 인터페이스 뒤에 감추는 캡슐화를 통해서 모듈화를 강화한다.
  • 프레임워크의 모듈화는 설계와 구현의 변경에 따르는 영향을 최소화함으로써 손쉽게 소프트웨어의 품질을 향상 시킬 수 있게 한다.

재사용성(reusablity)

  • 프레임워크가 제공하는 인터페이스는 여러 애플리케이션에서 반복적으로 사용할 수 있는 일반적인 컴포넌트를 정의할 수 있게 함으로써 재사용성을 높여준다.
  • 프레임워크 재사용성은 도메인 지식과 경험있는 개발자들의 이전의 노력을 활용하여, 애플리케이션의 요구사항과 소프트웨어 설계에 대한 공통의 솔루션을 반복적으로 재개발하고, 그에 대해 유효성을 다시 확인하는 작업을 피할 수 있게 합니다.
  • 프레임워크 컴포넌트를 재사용하는 것은 소프트웨어의 품질, 성능, 신뢰성, 상호 운용성을 향상시킬 뿐만 아니라, 프로그래머의 생산성을 상당히 높여줍니다.

 

 

확장성(extensibility)

  • 프레임워크는 다형성(polymorphism)을 통해 애플리케이션이 프레임워크의 인터페이스를 확장 할 수 있게 합니다.
  • 프레임워크 확장성은 새로운 애플리케이션 서비스와 특성을 커스터마이징하는 것을 보장하는 데 필수적인 사항이며, 또한 프레임워크를 애플리케이션의 가변성으로부터 분리함으로써 재사용성의 이점을 얻게 합니다.

제어의 역흐름(inversion of control)

  • 일반적으로 어떤 모듈을 호출함으로써 해당 모듈을 재사용하게 된다. 그러나 프레임워크에서는 이와는 반대되는 제어 흐름으로의 재사용성을 지원합니다.
  • 여기에서 이른바 헐리우드 원칙(hollywood principle)”이 적용된다. , 프레임워크 코드가 전체 애플리케이션의 처리흐름을 제어하며, 특정한 이벤트가 발생할 때 다형성(Polymorphism)을 통해 애플리케이션이 확장한 메서드를 호출함으로써 제어가 프레임워크로부터 애플리케이션으로 거꾸로 흐르게 합니다. 이러한 제어의 역흐름을 통해 프레임워크가 외부의 이벤트에 대해서 애플리케이션이 어떠한 메서드들을 수행해야 하는지를 결정할 수 있게 합니다.

 

 

라이브러리

라이브러리는 주로 소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임이다. 여기에는 구성 데이터,문서,도움말 자료, 메세지 틀, 미리 작성된 코드, 서브루틴(함수), 클래스, , 자료형 사양을 포함할 수 있다. OS/360 및 이후 세대에서는 파티션 데이터 세트로 부른다.

 

재사용이 가능한 필요기능으로 반복적인 코드 작성을 없애기 위해 언제든지 필요한 곳에서 호출하여 사용할수 있도록 classFunction으로 만들어 진것

 

 

 

프레임워크와 라이브러리의 차이 그리고 공통점

 

이 둘의 결정적인 차이는 바로 자유도이다. 이것이 프레임워크와 라이브러리의 결정적인 차이이다.

프레임워크를 사용해 프로그램을 만들기 시작하면 프레임워크에서 정해진 룰을 꼭 지키면서 만들어야 한다. 하지만 라이브러리는 도구 즉 프레임워크가 가지고 있는 규약만 지키면서 개발 한다면 나머지 자유로운 부분은 어떠한 도구(라이브러리)를 사용해도 무방하다.

 

하지만 결국 프레임워크와 라이브러리는 개발의 생산성을 향상시키기 위해 만든 것들이라는 점이 공통점이다.

 

  • 프레임워크 : 특정 프로그램을 개발하기 위한 여러 요소들과 메뉴얼인 룰을 제공하는 프로그램
  • 라이브러리 : 프로그램을 개발하기 위해 쓰는 공구와 같은 도구들
  • 공통점 : 프로그램을 쉽게 만들 수 있게 하는 공통된 목적이 있음
  • 차이점 : 자유도, 프레임워크는 꼭 써야되는 것과 지켜야하는 룰이 있다. 라이브러리는 쓰든 안 쓰든 개발자 마음이다.