" --------용기와 도전을 중시하는 그리핀도르---------
C++ : 강력하고 복잡한 언어, 성능최적화와 저수준 제어를 통해 도전적인 과제를 할 수 있음
Javascript :
- --------학구적인 레번클로---------
: <Python>
개요
간결하고 읽기쉬운 문법으로 빠르게 배우고 사용할 수 있지만, 정작 잘 사용하기 위해서는 깊이있는 이학계열의 학문적인 연구 벡그라운드가 있어야함.
기술
완전한 인터프리터언어로, 한줄 한줄 컴파일 되고 실행, 태생이 인터프리터 언어기때문에 java와 마찬가지로 JVM과 유사한 기능을 하는 pypy 또는 Jython이 있고 심지어 Jython은 자바의 JVM 그 위에서 실행되는 프로그램위의 프로그램...(왜 느린지 답나오죠..?). pypy의 경우 JVM레벨을 대체하는 프로그램으로 좀 더 빠른 연산을 위해 발전해옴... 하지만 일단 전체를 기계어로 컴파일한다음 JVM위에서 인터프리팅 방식만 취하는 java와 달리 진정한 인터프리팅언어로서 한줄 컴파일 한줄 실행이라는 정직한 방법의 pypy가 java보다 빠를 리는 만무함... 훨씬느림. 특히 반복문에 약함, 또한 자바가 추구하는 극단적인 크로스플랫폼가상머신 스타일을 지향하는 것도 아니라, 그점에서도 java에 1패.
장점
하지만 워낙 코드가 직관적이고 구현이 빠르며, 사소한 수정에도 전체를 컴파일해야하는 무겁지만 성능좋은 언어들과는 달리, 실제 성능이 필요한 작업은 cpp라이브러리로 짜놓아 돌리고, python으로는 빠르게 필요한걸 호출하기만 하는 식으로 아주 널리 사용되고 있음. 특히 본격적인 프로그램제작 대신, 프로그래밍의 도움을 받아 진짜로 해결하고 싶은 문제는 컴퓨터 밖에 있는 엣지있는 분야에서 연구용으로 많이 사용됨. 그러다보니 훌륭한 라이브러리도 많음. 말로하는 프로그래밍이 나오기전까지는 python의 이러한 입지는 명확하다.
: <Scalar>
개요
함수형 언어의 대표주자, 함수형 언어라고 해서 특별한 것이 있는게 아니라 일종의 코딩 패러다임임(방식과 구현 사조-스타일). cpp로도 동일한 개념을 구현가능하겠지만 표현이 지저분하고 애초에 지향하는 바가 다름
기술
핵심개념으로는 1객체지향속 함수형 프로그래밍 추구, 2타입추론(auto), 3패턴매칭(조건문간결화), 4불편컬렉션(극단적인const추구), 5고차함수(함수포인터의 표준/일반화), 6익명함수(람다표현식)
주요장단점
가독성과 유지보수성이 크게증가(변수, 예외가 적음), 연산속도도 빠를 가능성, 쓰레드를 아무리 과격하게 써도 문제가 발생하지 않음, 컴파일시간은 오래걸릴 수 있고 경우에 따라 모든 경우의 수를 컴파일단계에서 계산해 상수데이터화해 들고 있기 때문에 용량이 커질 여지가 있음
- --------생산성과 호환성이 높은 후플푸프---------
: <Java>
개요
cpp의 기믹들을 몹시 표준화 해놓고, 정책은 매우깐깐하게 해놔서 안전성 올리고, 개별 운영체제에 모두 호환되도록 개별적인 컴파일러를 다 만들어놓고 오버로딩개념으로 jvm가상머신위에서 동일한 코드로 일체의 수정없이 동일하게 동작... 2010년 스마트폰이 보급되기 전에는 멋진 기술임에는 틀림없지만, 크로스플랫폼 대응을 위한 엄청난 노력대비 가져가는 이점이 크지 않아서 주목도가 비교적 낮다가, 스마트폰의 등장으로 여러 기기와 여러 운영체제 대응이 화두로 떠오르면서 각광, 2014년 버전8에서 2024년 10년만에 버전 23까지 올라옴. 최근에는 자바의 cpp격인 슈퍼셋 코틀린도 보급화.
기술
어셈블리어로 제작된 cpp를 사용하여 개별 운영체제마다 오버로드될 수 있는 동일한 효과를 보장하는 JVM가상머신프로그램을 제공하고 해당 프로그램 위에서 인터프리팅 방식으로 코드가 순차 실행됨(원리상), 하지만 전체 코드를 기계어로 완전히 컴파일한 후에 바이너리로 되어있는 코드를 순차적으로 인터프리팅 하는 방식이라, 사용자는 전혀 파이썬과 같은 인터프리터 언어라고 느끼지 못함. 실제로 전체 코드를 컴파일 하기에 cpp와 같은 컴파일 언어이기도함. 하여 컴파일언어의 장점과 저수준과 고수준 사이에 중재프로그램을 하나 둠으로서 여러가지 다양한 지원과 유연성을 가지는 인터프리팅 방식의 장점을 고루 수용했다는 평. 단 이로 인해 cpp에 비해 특히 메모리를 비롯한 성능 점유가 커지고 python에 비해서는 바로바로 인터프리팅하는 기능은 일반적으로 지원되지 않는 느낌.
대표적인 장점 및 특징
의존성주입 : 클래스가 맴버로할 클래스포인터를 선언 단계에서 들고 있는 게 아니라, 데이터클래스 개념으로 스프링 컨테이너 클래스가 어지간한 클래스포인터를 맴버로 들고 있는 상태에서 해당 데이터클래스를 include하여 활성화여부를 컨트롤 하면서 호출하는 식으로 사용 (즉 맴버를 따로 엄격하게 관리하지 않아도 얼마든지 유연하게 가져다 쓸 수 있다.)
AOP(aspect-oriented-programming) : 로그매니저클래스등 전반에 걸쳐 공통으로 자주 쓰이는 common클래스를 (cpp의 컴포넌트클래스) 스프링AOP등 프레임워크의 일부분으로 표준 제공
jdbc트랜잭션api : 크로스DB플랫폼 각각의 쿼리언어를 동일한 표준 문법으로 온전히 조작할 수 있도록 api화 해놓음, 쿼리 결과를 확인하는 클래스등도 미리 표준으로 준비해놓음 (앱웹에서 선호되는 이유), MySQL/PostgreSQL/msSQLserver/Oracle/SQLite/ibmDB2/mariaDB/ApacheDerby
엄격한 정책 : exception강제, 상속시 생성자 순차생성소멸 강제, 동적메모리관리 강제, 명시적포인터사용의 금지 등등
- --------야심있고 전략적인 슬리데린---------
: <Swift>
개요
2014출시, 구 Object-C의 후신, 양분화된 스마트폰 운영체제의 어플리케이션 개발언어의 양대 산맥 java와 swift, 현재는 kotlin의 대항마이다.
기술
자바의 슈퍼셋인 코틀린과 자바가 기본적으로 기계어를 기반으로 하여 속도가 빠른 편이기는 하지만 태생적으로 인터프리팅언어인 것과는 달리, Swift는 스마트폰등 저스팩 기기용 언어임에도 태생부터가 완전한 컴파일 언어로, 전신인 Object-C의 경우 C언어로 제작되어 네이티브 코드로 컴파일되어 상당한 성능을 보여주고 (물론 C만큼은 아니지만), 후신인 스위프트의 경우 C를 준용하되 자체 최적화 컴파일러로 추가 / 개조하여 안정성 및 현대적인 개념들을 추가했다. 한마디로 java의 대항마치고는 고성능이다. 하지만 컴퓨팅파워가 제한되고, 요구성능도 높지않은 기기에서 swift가 빛을 발할 수 있는 분야는 카메라보정(이미지프로세싱), 게임정도이다. 하지만 본격 성능 어플리케이션은 스마트폰앱도 결국 cpp로 만들기때문에 성능의 포지션이 애매하다고 할 수 있다.(최신cpp에 비해 더 현대적일리도 없다.) 성능을 선택한 대신 java의 압도적인 크로스플랫폼유연성은 완전히 포기할 수 밖에 없기때문에 그점에서도 손해가 막심하다. 또한 저수준언어를 표방하는 특성상 UI개발에 제한이 많을 가능성이 있다.(안드로이드에 비해
딱딱하고깔끔하고구린직관적인 UI)... 애플로서는 흥미롭게도 애플컴퓨터에서는 자바를 이용한 프로그램 개발이 가능하지만, 애플스마트폰에서는 자바를 이용한 개발을 의도적으로 막고 있다. 이를 의식하고 있음에도 전략적인 선택을 하고 있다는 방증이라 할 수 있다. 흥미롭고 대담한 전략.“