🐯
경민민 IT 핸드북
  • Orientation
    • 전달사항
    • 복습방법
    • 수료한 선배의 한마디
    • 간단 자기소개
    • 스터디
  • 백엔드
    • Java
      • 1장 프로그래밍 기초
      • 2장 자바 메모리구조
        • 1. Stack
        • 2. Heap
      • 6장 객체
      • 8장 상속
      • 9장 다형성
      • 10장 추상클래스와 인터페이스
      • 13장 Generic
      • 14장 Thread
      • 15장 Network
      • 16장 Lamda
        • 1. 내부 클래스 (Inner Class)
          • DTO , VO, Builder Pattern
        • 2. 람다 표현식 (Lambda Expression)
        • 3. 스트림 API (Stream API)
          • Optional
      • 17장 Enum
  • 프론트
    • Node.js
    • Java Script
      • ES6+
        • Node.js로 자바스크립트 실행
        • let , const , var
        • Destructuring문법
          • Rest(...) 문법
        • Arrow Function
        • 모듈
        • ETC
    • Type Script
      • 개요
      • TS설치 및 환경설정
      • 타입스크립트 기본
        • 기본 자료형들과 타입추론
        • Object, Array , Tuple
        • Any, Unknown, Union Type
        • Function Type
          • Type Assertion && Narrowing
          • Never type
        • Type Aliases와 Interface
        • 리터럴 타입
        • 함수 추가 문법
        • Class문법
        • 객체 타입 추가 문법
        • 실습문제 1차
        • 실습문제 2차
        • 실습문제 3차
    • React
      • 개요
      • SPA 와 MPA
        • SEO(작성예정)
      • 리액트 프로젝트 생성(18.3.1.ver)
        • HTML + react 샘플
        • CRA 와 Vite 비교
      • 리액트 개념들
        • Component
          • 클래스 컴포넌트(작성예정)
          • 함수형 컴포넌트(작성예정)
        • JSX
        • React Virtual Dom
          • Reconciliation
        • hook
          • useState
        • 리액트 데이터 전달
          • FLUX
      • 백엔드 서버 연동
        • 비동기요청
        • 웹소켓
        • Promise(작성예정)
      • 실습문제 1
      • 실습문제 2
      • 실습문제3
      • 실습문제4
  • 프레임워크
    • Spring
      • Spring 개발환경 구축
        • 프로젝트 환경설정
        • 프로젝트 생성
          • MVC Project 생성이슈
        • Maven 설정
        • web.xml 설정
        • Spring Bean Configuration.xml 설정
      • Spring Legacy Project
        • Spring 요청 및 응답 흐름
        • Spring 주요 Annotation
          • 의존성 주입방식의 차이점
          • @ModelAttribute와 유효성검사
          • 비동기처리
          • 스프링 예외처리
        • Logging
        • Pagination
        • Spring File 업로드 및 다운로드
        • Spring WebSocket
        • Spring AOP
      • Spring 라이브러리들(작성예정)
        • Lombok
        • Maven
        • MyBatis
      • Spring 구성 모듈(작성예정)
      • 스프링 과제
    • Spring Boot
      • Spring Boot 개발환경 구축
      • 스프링 부트 프로젝트 생성방법들
        • 프로젝트에서 사용하는 의존성들
      • 스프링 프로젝트 구조
        • SpringBootApplication
      • application.properties
      • Cross Origin
        • CORS
      • WebSocket
        • Stomp(작성중)
      • 로그인(작성중)
      • Spring Security(작성중)
      • 실습문제 Select
      • 실습문제 Update
      • 실습문제 Delete
  • 형상관리(Git)
    • GitHub설정
    • SourceTree를 활용한 깃허브 연동
      • 소스트리 설치
      • Clone
      • Branch
        • Branch Protection rules
          • Branch Protection Rules 상세규칙
        • Rebase 와 Squash (작성예정)
      • Team Project 설정
        • 팀장 프로젝트 셋팅
          • Collaborator
          • .gitignore 설정
        • 팀원 프로젝트 셋팅
        • 공통 프로젝트 진행
  • 프로젝트
    • 진행순서
      • 요구사항 분석 단계
        • 유용한 사이트
      • 프로그램 설계 단계
        • 유용한 사이트
      • 프로그램 구현단계
        • SourceTree를 활용한 Team Project설정
      • 테스트 단계
  • 배포
    • AWS-EC2 배포 연습
    • DevOps
      • IT시스템의 변화와 DevOps
      • DevOps 라이프사이클
    • 젠킨스
      • 도커
        • 도커 설치 방법
        • 도커 기본 명령어들
      • 젠킨스 설치
      • 젠킨스 프로젝트 생성
      • 젠킨스 소스코드 통합 - Github
      • 젠킨스 빌드 설정 - Maven
      • 배포 서버 구축하기
      • 파이프라인 구축
      • AWS 서버 생성
        • AWS 인스턴스 생성
        • AWS - Zenkins 연동
        • AWS - 배포서버 연동
        • AWS - Jenkins CI/CD파이프라인 구축
  • 유용한 사이트 모음
  • SQL
    • SQLD
      • 데이터 모델링의 이해 - 스키마
      • 데이터 모델링의 이해 - ERD
      • 데이터 모델링의 이해 - 정규화
      • 데이터 모델링의 이해 - NULL
      • SQL 기본 및 활용 - WINDOW FUNCTION
    • Oracle
      • 1장 개요
      • 2장 SQL
  • LLM 서비스
    • 1장 LLM에 대한 이해
    • 2장 프롬프트 엔지니어링
      • 프롬프트와 프롬프트 엔지니어링
      • GPT PlayGround
      • 프롬프트 작문 유형
      • 기본 프롬프트 엔지니어링 태크닉
      • 고급 프롬프트 엔지니어링 태크닉
        • ReAct Prompting
        • Active-Prompt
        • Reflexion
        • Graph Prompt
      • OpenAI API설정
      • OpenAI를 활용한 프롬프트 엔지니어링 실습
        • 실습 프롬프트
    • 3장 Lang Chain 프레임워크
      • LangSmith 프레임워크
        • LangSmith를 활용한 LangChain 모니터링 설정
      • LangChain 실습 1 - Prompt
        • 실습 코드
      • LangChain 실습 2 - LLM 캐시와 메모리
    • 4장 RAG
      • Document Loader - 문서 로더
      • Text Splitter - 텍스트 분할
      • Embedding - 임베딩
      • Vector Store - 벡터 저장소
      • Retriever - 검색기
      • ReRanker - 재평가자
      • RAG
Powered by GitBook
On this page
  • intro - Hello World
  • Java?
  • 자바의 특징
  • 1. 이식성이 좋다(운영체제에 독립적이다)
  • 2. 객체 지향 프로그래밍 지원
  • 3. 사용하기 쉬운 언어
  • 4. 자동 메모리 관리
  • 5. 멀티 쓰레드 지원
  1. 백엔드
  2. Java

1장 프로그래밍 기초

PreviousJavaNext2장 자바 메모리구조

Last updated 7 months ago

intro - Hello World

개발자의 세계에 오신걸 환영합니다.

앞으로 약 6개월 간 개발자에게 필요한 각종 지식과 스킬들에 대해서 배울건데 그 중 가장 중요한 첫 번째 과정으로 백엔드 프로그래밍언어 Java에 대해서 학습해도록 하겠습니다.

먼저 본격적으로 Java에 대해 학습하기 전에 프로그램, 프로그래밍, 프로그래머의 정의에 대해서 이해하고 넘어가도록 하겠습니다.

먼저 프로그램이란, 컴퓨터가 이해할 수 있는 명령어의 집합이다. 이 프로그램이 실행중인 상태를 프로세스라고 부르죠. 예를 들어 바탕화면에 보이는 메모장, 크롬 , 카카오톡 등도 프로그램이라고 볼 수 있습니다.

다음으로, 프로그래밍이란 위에 설명한 프로그램을 작성하는 과정을 의미합니다. 프로그램이 명령어의 집합이었으니 이 명령어들을 작성하는 과정이라고 이해하시면 되겠습니다.

마지막으로 프로그래머란 이 프로그램을 작성하는 사람 즉 개발자를 의미합니다.

그리고 저희의 목표는 Java라는 프로그래밍 언어를 통해 프로그램을 개발하는 개발자가 되는 것 입니다. 그럼 본격적으로 Java에 대해서 학습해 보도록 하겠습니다.

Java?

Java는 국내에서 가장 많이 사용되고 있는 프로그래밍언어입니다. 1995년에 출시 되었으며 출시 당시부터 선풍적인 인기를 얻었으며, 현대까지도 많은 개발자들(특히 국내)이 사용하고 있는 언어 중 하나입니다. 아래 링크를 통해 전세계적으로 개발자들이 어떤 언어를 사용하는지 랭킹으로 확인해 볼 수 있습니다.

전 세계적으로는 파이썬, C++보다 떨어지지만 우리나라의 경우 국가에서 Java를 프로그래밍언어의 표준으로 정해두고 교육을 장려하여 자바 개발자를 양성하고 있기 때문에 Java언어의 사용비중은 압도적이라고 할 수 있습니다.

그럼 왜 국가에서는 그 수많은 언어들 중에서 Java를 선택했는지, 더불어서 출시 당시부터 지금까지 쭉 인기를 유지하는 비결이 무엇인지를 알아보기 위해 Java의 특징에 대해서 알아보도록 하겠습니다.

자바의 특징

1. 이식성이 좋다(운영체제에 독립적이다)

자바의 가장 큰 특징 중에 하나이며 자바가 출시당시 부터 큰 인기를 끈 비결 중에 하나입니다. 이 이식성이 좋다는 개념을 잘 이해하기 위해서는 이식성이 좋지 못했던 먼 과거로 거슬러 올라갈 필요가 있습니다.

A. 기계어

프로그래밍언어의 시작은 기계어입니다. 기계어란 컴퓨터가 이해 할 수 있는 저수준 언어(low-level language)를 의미하며 0과 1이 두 개의 숫자를 통해 규칙을 정하여 의사소통 할 수 있습니다.

이 기계어를 통해 컴퓨터와 대화하고 명령을 통해 프로그램을 실행하기 위해서는 굉장히 길고 복잡한 방식으로 코드를 작성해야 했습니다.

다만 이렇게 작성된 코드는 굉장히 복잡하고, 당연하지만 사람이 한눈에 알아볼 수 없기 때문에 개발속도도 느리고 오류발생의 가능성도 현저히 높았습니다. 이를 해결하기 위하여 기계어와 1 대 1로 대응되는 언어인 어셈블리어(Assembly Language)를 만들어 사용하였습니다.

B. 어셈블리어(Assembly Language)

어셈블리어 또한 컴퓨터가 이해할 수 있는 저급 언어이며 각 컴퓨터는 어셈블리어로 작성된 코드를 기계어로 번역하여 명령을 실행하였습니다.

기계어로 직접 코딩을 하는것 보단 훨씬 편리하지만, 각 컴퓨터를 만든 개발사마다 서로 다른 어셈블리어가 존재하기 때문에 이를 따로 공부해야 했습니다.즉 똑같은 프로그램이더라도 서로 다른종류의 컴퓨터가 10개 있다면 10개의 서로 다른 어셈블리어로 작성된 프로그램을 만들어야 했던 것입니다. 이는 똑같은 프로그램을 다른 운영체제의 컴퓨터에서 곧바로 실행할 수 없으므로 이식성이 낮다고 볼 수 있습니다. 이를 해결하기 위해 C언어가 개발 되었습니다.

C. C언어(WOCA)

C언어는 저수준 언어와는 다르게 사람이 이해하기 쉽도록 개발된 고수준 언어(high-level language)입니다. 다만 고수준 언어를 컴퓨터는 이해할 수 없기 때문에 고수준 언어를 각 컴퓨터의 기계어에 맞게 번역을 해주는 프로그램이 필요한데 , 이 프로그램을 컴파일러(Complier)라고 부릅니다.

C언어로 개발된 소스코드는 어셈블리어와는 다르게 컴퓨터별로 여러번 작성할 필요가 없었습니다. C언어에서 각 컴퓨터에 호환되는 컴파일러를 만들어놨기 때문이죠.

이렇게 C언어로 작성한 소스코드는 어셈블리어에 비해 이식성이 높은건 당연하지만, 어셈블리어의 단점을 모두 해결한건 아니었습니다. C언어로 작성한 소스코드의 경우 각 운영체제에서 데이터를 저장하는 방법에 따라 특정 운영체제에서는 아예 돌아가지 않는 경우도 존재하기 때문에 별도의 수정이 필요했습니다. 즉 윈도우에서 작성한 소스코드를 Mac에서 동작시키기 위해 소스코드의 수정이 필요한 것이죠. 이러한 문제까지 고친 고수준 언어가 Java입니다.

D. Java(WORA)

자바는 C언어의 단점을 보완하기 위해 개발되었습니다. C언어로 작성한 소스코드는 운영체제별로 수정이 필요하며, 운영체제에 맞는 컴파일러를 별도로 설치 및 구매해야 했습니다. 하지만 자바로 작성한 소스코드는 JRE(Java Runtime Environment)라는 프로그램에 내장된 별도의 컴파일러를 통해 어떤 운영체제에서든 실행이 가능했습니다.(WORA)

이를 가능하게하는 핵심 기술이 바로 JVM(Java Virtual Machine)입니다. JRE내부에는 프로그램으로 구현된 JVM이라는 가상의 자바 컴퓨터가 존재합니다. 여러분들이 작성한 소스코드를 실제로 실행시키는 역할도 각 컴퓨터가 하는것이 아니라 JVM이 대신 실행하기 때문에 자바개발자들은 소스코드를 한번만 작성하면 어떤 운영체제에서도 JRE만 설치되어 있다면 코드의 수정 없이 실행이 가능합니다. 즉 운영체제에 맞춰서 수정할 필요가 없는 것이죠. 이를 두고 운영체제에 독립적이다, 즉 "이식성이 높다" 라고 표현을 합니다.

  • 자바는 JVM에 의해 실행되기 때문에 JVM기반 언어라고도 불립니다.

  • JAVA외에도 JVM기반 언어로는 Kotlin, Scala, Jython등이 존재합니다.

2. 객체 지향 프로그래밍 지원

객체지향 프로그래밍이란 프로그램을 설계하는 설계방법(패러다임) 중의 하나입니다.

이 객체지향 프로그래밍에 대해간단하게 설명하면 프로그램을 프로그래밍할 때 필요한 다양한 데이터들을 객체화하여 이 객체들이 서로 상호작용하여 프로그램이 작동할 수 있도록 지원해주는 프로그래밍 언어라는 뜻 입니다.

예를 들어 무신사와 같은 온라인 쇼핑몰을 떠올리시면 이해하기 편하실겁니다. 무신사에는 구매를 위한 회원이라는 객체가 있고, 다양한 브랜드라는 객체가 있고 브랜드안에는 판매할 상품이라는 객체가 있습니다. 회원이라는 객체는 내가 원하는 브랜드의 상품을 골라 결제를 하게 되겠죠. 즉 각 객체들은 상호작용하여 현실세계에서 구매했던 프로세스를 가상세계에서도 작동이 가능하도록 하는 것이죠.

더 자세한 설명은 5장 객체시간에 이어서 진행하도록 하고, 지금은은 자바는 객체지향 프로그래밍을 지원하는 언어다 라는 특징에 대해서만 기억해주시면 되겠습니다.

3. 사용하기 쉬운 언어

자바는 C언어와 같은 고수준 언어이면서 타 언어에 비해 다루기 쉽다는 장점을 가지고 있습니다.

4. 자동 메모리 관리

자바는 C언어와는 다르게 사용하지 않는 데이터를 직접 제거할 필요가 없습니다. Java에는 Garbage Collector라는 사용하지 않는 자원에 대해 대신 자원관리를 해주는 프로세스가 상시 작동하고 있기 때문입니다.

5. 멀티 쓰레드 지원

쓰레드에 대해서는 14장에서 알아보도록 하겠습니다.

PYPL PopularitY of Programming Language index
거의 암호
출처:
출처 :
https://velog.io/@jeongminji4490/Android-Quick-Overview
https://masterrajdeep92.wordpress.com/2016/02/01/platform-independence-in-java/
TIOBE Index - TIOBETIOBE
Logo