나는 어떤 언어를 선택하고 배워야 할까?
이 글을 작성하게 된 건 최근 이직을 고려하면서 면접을 보게 되었는데, 하나의 면접 질문이 나에게 굉장히 충격으로 다가왔습니다. 그 이유는 내가 신입 때 면접을 위해 달달 외우고 이후로는 그저 주어진 업무에만 치중하고 있다고 느꼈기 때문입니다. 이 블로그 메인에 종종 서브타이틀로 “知彼知己 百戰百勝 (지피지기 백전백승): 상대를 알고 나를 알면 백 번 싸워도 백 번 이긴다.”라는 글귀를 볼 수 있을 것입니다. 무엇이든 알고 쓰는 것과 모르고 쓰는 것은 차이가 있을 것이라 생각됩니다. 모르고 구글링만 해서 복사만 할 줄 아는 카피라이터가 되지 않기 위해 열심히 공부합시다.
개발언어의 정의
개발 언어란 컴퓨터 프로그램을 작성하는 데 사용되는 언어를 의미한다. 이러한 언어는 사람과 컴퓨터가 소통할 수 있게 해주는 도구로, 각기 다른 문법과 특성을 가지고 있다. 그리고 개발 언어는 크게 두 가지로 나뉘는데, ‘Low level languages‘와 ‘High level languages‘로 구분된다.
‘Low level languages’와 ‘High level languages’ 란?
Low languages는 저급 언어로 기계어와 가까운 언어를 말하며, 하드웨어와 직접 상호작용할 수 있도록 설계된 언어이다.
High languages는 고급 언어로 인간이 사용하는 언어와 가까운 언어를 말하며, 인간 친화적인 문법과 추상화를 제공하여 프로그램 작성과 유지보수를 쉽게 만들어주는 언어이다
특징 | 저급 언어 (Low Level Languages) | 고급 언어 (High Level Languages) |
---|---|---|
추상화 수준 | 기계 친화적, 하드웨어와 직접 상호작용 | 인간 친화적, 하드웨어로부터 추상화됨 |
성능 및 효율성 | 고성능, 메모리 및 CPU 자원 효율적 사용 | 상대적으로 느릴 수 있으나, 개발 생산성 높음 |
사용 용이성 | 작성 및 유지보수가 어려움 | 읽기 쉽고 쓰기 쉬움, 유지보수 용이 |
이식성 | 특정 하드웨어에 종속적 | 다양한 플랫폼에서 사용 가능 |
예시 | 기계어, 어셈블리어 | Python, Java, C++, JavaScript |
장점 | 빠른 실행 속도, 하드웨어 자원에 대한 세밀한 제어 | 코드 작성 및 유지보수가 용이, 다양한 플랫폼에서 사용 가능 |
단점 | 작성 및 유지보수가 어렵고, 가독성이 낮으며, 이식성이 떨어짐 | 저급 언어에 비해 실행 속도가 느릴 수 있고, 하드웨어 자원에 대한 세밀한 제어가 어려움 |
High Level Languages
현재 많은 개발자들이 인간 친화적인 언어 High Level Languages를 사용한다.
많은 High Level Languages들 중에 우리들은 어떤 언어를 선택해야하면 언어별로 용도와 특징을 알아보자.
Language | 용도 | 특징 | 장점 | 단점 |
---|---|---|---|---|
Python | 웹 개발, 데이터 분석, 인공지능, 자동화 스크립팅 등 | 간결하고 읽기 쉬운 문법, 다목적 사용 가능 |
|
|
JavaScript | 클라이언트 측 및 서버 측 웹 개발, 모바일 앱 개발 (React Native), 데스크탑 앱 개발 (Electron) | 웹 개발에 필수적인 언어 |
|
|
Java | 대규모 기업용 애플리케이션, 안드로이드 앱 개발, 서버 측 개발 | 플랫폼 독립적인 객체지향 프로그래밍 언어 |
|
|
C# | 윈도우 애플리케이션 개발, 게임 개발 (Unity), 웹 애플리케이션 개발 | 마이크로소프트의 .NET 프레임워크와 함께 사용하는 객체지향 프로그래밍 언어 |
|
|
C++ | 시스템 소프트웨어, 게임 개발, 성능이 중요한 애플리케이션 | C 언어에 객체지향 개념을 도입한 고성능 프로그래밍 언어 |
|
|
TypeScript | 대규모 자바스크립트 애플리케이션 개발 | JavaScript에 정적 타입을 추가한 언어 |
|
|
Go (Golang) | 서버 측 개발, 클라우드 네이티브 애플리케이션, 시스템 프로그래밍 | 구글에서 개발한 간결하고 효율적인 동시성 지원 프로그래밍 언어 |
|
|
Swift | iOS, macOS, watchOS, tvOS 애플리케이션 개발 | 애플에서 개발한 iOS와 macOS 애플리케이션 개발 언어 |
|
|
Kotlin | 안드로이드 앱 개발, 서버 측 개발 | JVM에서 실행되는 현대적 언어, 주로 안드로이드 개발에 사용 |
|
|
Rust | 시스템 프로그래밍, 웹 어셈블리, 임베디드 시스템 | 메모리 안전성과 성능을 모두 제공하는 시스템 프로그래밍 언어 |
|
|
Framework
프레임워크(Framework)는 소프트웨어 개발에서 코드 구조와 설계를 표준화하여 개발자가 더 쉽게 애플리케이션을 개발할 수 있도록 돕는 도구입니다. 프레임워크는 특정 기능이나 작업을 처리하는 데 필요한 코드와 규칙의 집합으로 구성되며, 개발자가 일관된 방법으로 문제를 해결할 수 있게 합니다.
주요 특징
- 재사용성: 프레임워크는 공통적으로 필요한 기능(예: 데이터베이스 연결, 세션 관리)을 미리 구현해 놓아서 개발자는 이를 재사용할 수 있습니다. 이를 통해 중복된 코드를 작성할 필요가 줄어듭니다.
- 구조와 패턴 제공: 프레임워크는 애플리케이션의 구조를 정하고, 개발자가 따라야 할 규칙과 디자인 패턴을 제공합니다. 이를 통해 프로젝트의 일관성을 유지할 수 있습니다.
- 추상화: 많은 복잡한 작업을 추상화하여 쉽게 사용할 수 있도록 제공합니다. 예를 들어, 데이터베이스 쿼리 작성, 요청 처리 등을 간단한 메소드 호출로 대체할 수 있습니다.
- 생산성 향상: 공통 기능을 처리하는 도구와 템플릿을 제공하여 개발자의 생산성을 높이고, 개발 시간과 비용을 절감합니다.
- 유지보수성: 일관된 코드 구조와 디자인 패턴 덕분에 코드의 가독성이 높아지고, 유지보수가 쉬워집니다.
예시
- 웹 애플리케이션 프레임워크:
- Django (Python): 완전한 기능을 갖춘 웹 애플리케이션 프레임워크로, 관리자 인터페이스, ORM(Object-Relational Mapping), URL 라우팅 등을 제공합니다.
- Spring (Java): 엔터프라이즈급 애플리케이션 개발을 위한 강력한 프레임워크로, 종속성 주입(DI)과 같은 주요 디자인 패턴을 지원합니다.
- Ruby on Rails (Ruby): 코드 작성 속도를 높이는 데 중점을 둔 프레임워크로, CRUD(생성, 읽기, 업데이트, 삭제) 기능을 자동으로 생성하는 기능을 갖추고 있습니다.
- Express (Node.js): 경량의 웹 프레임워크로, 웹 애플리케이션과 API를 신속하게 개발할 수 있습니다.
- Laravel (PHP): 쉽고 우아한 구문을 제공하여 PHP 웹 애플리케이션을 개발하는 데 필요한 많은 기능을 내장하고 있습니다.
- 모바일 애플리케이션 프레임워크:
- React Native: JavaScript를 사용하여 iOS와 Android 애플리케이션을 동시에 개발할 수 있는 프레임워크.
- Flutter: Google에서 개발한 오픈 소스 UI 프레임워크로, 하나의 코드베이스로 iOS와 Android 애플리케이션을 작성할 수 있습니다.
- 데스크탑 애플리케이션 프레임워크:
- Electron: JavaScript, HTML, CSS를 사용하여 크로스 플랫폼 데스크탑 애플리케이션을 개발할 수 있는 프레임워크.
장점
- 빠른 개발: 미리 정의된 구조와 모듈을 사용하여 개발 속도가 빨라집니다.
- 안정성: 검증된 코드와 패턴을 사용함으로써 안정성이 높아집니다.
- 보안: 프레임워크는 보안 관련 문제를 처리하는 기능을 제공하여, 보안성을 강화할 수 있습니다.
단점
- 제한된 유연성: 프레임워크의 구조나 패턴에 맞춰 개발해야 하므로, 필요한 기능을 구현하는 데 제약이 있을 수 있습니다.
- 학습 곡선: 새로운 프레임워크를 배우고 익히는 데 시간이 걸릴 수 있습니다.
- 종속성: 특정 프레임워크에 종속되면, 이를 변경하거나 업그레이드하는 데 어려움이 있을 수 있습니다.
프레임워크는 개발의 생산성을 높이고, 코드의 품질을 보장하며, 일관성을 유지하는 데 중요한 역할을 합니다. 따라서 프로젝트의 요구 사항과 팀의 기술 수준에 맞는 프레임워크를 선택하는 것이 중요합니다.