Java

Java는 1995년에 발표된 객체 지향 프로그래밍 언어로 C#과 문법적 성향이 굉장히 비슷하다.
Write Once, Run Anywhere 말그대로 언어코드를 한 번 작성하면 이 JVM이 설치된 어떤 OS에서도 동일하게 실행된다.
( 자체적인 바이트코드 형식(.class)으로 변환 / JVM(Java Virtual Machine)을 이용해 해석하는 하이브리드 언어)

특징

  • Object-oriented(객체지향) : 원시 자료형(int/float/long/boolean)을 제외한 모든게 Object(객체) Class에서 파생된다.

  • Multithreaded(멀티스레드 지원) : 멀티 프로세서 하드웨어를 지원하도록 설계되어 있다.

  • Simple(간단함) : C++에 가깝지만 고급 언어 요소에서 불필요하다 판단되는 요소들을 모두 제거하여 간단하다.

  • Robust(강력한) : 포인터 연산 지원 X, 자바 시스템이 모든 메모리를 자동으로 관리하는 방식을 채택하고 있어 프로그래머가 메모리 누수를 걱정할 필요없다.

  • Interpreted(해석형) : JVM을 이용해 시스템과 상관없는 바이트 코드를 해석하기때문에 컴파일 언어에 가까운 속도와 독립성 플랫폼 독립성을 확보할 수 있었다.(Interpreted 언어의 장점)

  • Secured(안전한) : 자료형 타입에 민감하여 일단 컴파일만 되면 실행할 때 오류 발생률이 다른 언어에 비해 현저히 낮다.(Compiled 언어의 장점)

C++ 문법간 차이점

  • 포인트 연산지원 및 메모리 관리를 시스템에서 자동적으로 처리한다.

  • C++, Python 등 많은 언어들이 클래스의 다중 상속을 지원하지만 자바는 다중 상속을 지원하지 않는다.

  • Namespace와 같은 개념을 Java에선 Package로 사용된다.

  • C#/C++ 의 대표적 IDE인 Visual Studio 와 같이 Java에는 IntelliJ 가 있다.

  • 객체간 ‘==’ 연산자는 C++처럼 실제값 비교대신 주소값(참조)을 비교한다. ( 대신 equals() 메서드를 이용한다. )

항목 Java C++
실행 방식 JVM 위에서 실행 (바이트코드) 기계어로 직접 컴파일
메모리 관리 GC 자동 관리 개발자 직접 관리 (new/delete)
포인터 없음 (참조만 존재) 있음 (포인터 직접 조작)
플랫폼 OS 무관 (JVM만 있으면) OS/아키텍처마다 재컴파일 필요
실행 속도 약간 느림 (JVM 오버헤드) 빠름 (네이티브 실행)
다중상속 인터페이스로만 가능 클래스 다중상속 가능
헤더 파일 없음 .h 헤더 파일 필요
연산자 오버로딩 불가 가능
소멸자 없음 (GC가 처리) ~Destructor() 직접 정의
템플릿 / 제네릭 제네릭 (<T>) 템플릿 (template<typename T>)
빌드 도구 Gradle, Maven Make, CMake
주요 사용처 백엔드, Android 게임엔진, 시스템, 임베디드
null 안전성 런타임 NPE 위험 컴파일 타임 일부 체크
문자열 String 객체 (불변) std::string (가변)
접근 제어 public private protected 동일 + friend 키워드

SpringBoot

Node.js의 Express.js 와 같이 생산성 향상에 도움을 주는 프레임워크 Spring과 이러한 Spring에서 기본 환경설정을 쉽게 해주는 SpringBoot 이다.

Image

  1. Project : 빌드 툴 선택 ( 대부분의 프로젝트는 비교적 최신 업데이트 되는 Gradle을 사용)

  2. Language : 프로젝트에 사용하고자 하는 프로그래밍 언어 선택

  3. Spring Boot : 스프링 부트의 버전 선택

    • SNAPSHOT : 아직 개발이 완료되지 않은 버전
    • M(Milestone) : 개발은 완료되었으나, 기능 개선/버그 수정중인 버전
    • RC(Release Candidate) : 기능 개선/버그 수정이 완료되었으나, 최종적으로 릴리즈되지는 않은 버전
  4. Project Metadata : 프로젝트의 정보 입력

    • Group : 프로젝트를 만드는 그룹의 이름으로, 보통 기업의 도메인 명을 역순으로 입력
    • Artifact : 빌드 결과물의 이름
    • Name : 프로젝트의 이름
    • Description : 프로젝트에 대한 간략한 설명
    • Package name : 프로젝트에 생성할 패키지를 설정
    • Packaging : 배포를 위해 프로젝트를 압축하는 방법을 선택
    • Java : 여러분의 PC에 설치된 JDK의 버전을 선택
  5. Dependencies : 애플리케이션의 동작에 필요한 외부라이브러리 선택(종속성 자동 관리)

설정 완료 이후 Generate를 통해 파일을 다운받아 IDE(IntelliJ)로 파일을 열어 진행!

Express와의 개념 대응표

역할 Express (Node.js) Spring Boot (Java)
앱 초기화 express() @SpringBootApplication
라우터 app.get('/path', handler) @GetMapping("/path")
요청 객체 req.body @RequestBody
응답 객체 res.json() ResponseEntity
미들웨어 app.use(middleware) Filter, Interceptor
비동기 처리 async/await @Async, Kotlin 코루틴
ORM Sequelize, Prisma Spring Data JPA
환경 변수 .env application.properties / application.yml
라우터 분리 express.Router() @RestController
에러 핸들러 app.use((err, req, res, next) => {}) @ControllerAdvice
의존성 관리 package.json (npm) build.gradle (Gradle)
서버 실행 app.listen(3000) 내장 Tomcat 자동 실행

한줄 평

  • 내일 첫 미팅이 진행될 예정이다. 두근되면서도 떨린다..!