백엔드 부트캠프 6일차 (2024.10.12 토) JAVA 이론

커비·2024년 10월 12일
0

백엔드 부트캠프

목록 보기
10/71
post-thumbnail

⏰ Today's Schedule

13:00 ~ 18:30 JAVA 강의 수강
18:30 ~ 19:30 JAVA 실습
20:30 ~ 21:30 블로그 작성 & 개인회고
21:30 ~ 22:30 SQL 문법 연습문제 풀기


🖍️ Today I Learned

5주차 JAVA 대학교 강의 수강

솔직히 내배캠 부트캠프에서 제공해준 JAVA 웹페이지는 다시 기억을 떠올리기에도 이해하기에도 조금 어려워서 1학기 때 수강했던 자바프로그래밍 강의를 다시 수강하는 시간을 가져보았다. 주말이니까 내배캠이 제공하는 것을 벗어난 강의를 들어도 어차피 같은 JAVA 공부니까 상관없지 않을까? 하는 생각이다!

📌 프로그램과 프로그래밍 언어

💡 프로그램이란?

프로그램(Program)이란 컴퓨터가 주어진 작업을 수행하기 위한 일련의 명령어(command) 또는 문(statement)들의 모음 이라고 한다.


💡 알고리즘이란?

알고리즘(Algorithm)이란 프로그램으로 목적하는 결과를 얻기 위한 절차나 방법을 의미한다.

  • 자연어, 의사 코드(슈도코드), 순서도 등으로 표현함
  • 알고리즘(설계도)에 따라 프로그램을 작성함
  • 기계어(machine language) 로 번역(compile)된 결과물뿐만 아니라, 프로그래머가 작성한 소스(source)까지도 포함
  • 소프트웨어는 프로그램뿐만 아니라 CD, 설명서, 제품 포장 등 패키지 전체를 뜻하기도 함

💡 프로그래밍 언어란?

  • 컴퓨터에서 동작하는 프로그램을 작성하기 위한 언어
  • 컴퓨터가 작업 지시를 이해할 수 있도록 명령하는 언어
  • 컴퓨팅 환경과 개발 프로그램의 용도와 맞는 목적에 따라 언어를 선택

📌 고급 프로그래밍 언어

고급 언어에는 포트란(FORTRAN), C/C++, 코볼(COBOL), 파스칼(PASCAL), 파이썬(Python), 베이직(BASIC), 리스프(LISP)가 있다.

💡 고급(high level) 프로그래밍 언어란?

사람이 알기 쉽도록 영문자, 숫자, 기호로 쓰여진 프로그래밍 언어

  • 장점 : 저급(low level)프로그래밍 언어보다 가독성이 높고 다루기 간단함
  • 컴파일러(compiler)나 인터프리터(interpreter)에 의해 기계어로 번역되어 실행
    기계어 : CPU가 실행할 수 있는 이진 코드로 되어있는 프로그램을 말함
    컴파일러, 인터프리터 : 고급 프로그래밍 언어를 기계어로 번역해주는 번역기
  • C언어, 자바, 베이직 등 대부분의 프로그래밍 언어들은 고급언어에 속함

📌 저급 프로그래밍 언어

저급 언어에는 기계어(machine language)와 어셈블리어(assembly language)가 있다.

💡 기계어(machine language)

컴퓨터(CPU)가 해독할 수 있는 2진 코드로 나타낸 언어

  • CPU, CPU에 연결된 장치, 주변기기를 제어하기 위해서 0과 1로 나타낸 고유 명령 형식
  • CPU 종류에 따라 그 형식과 내용이 모두 다르므로 기계어로 작성된 프로그램들은 한 종류의 CPU에서만 동작함
  • 일반적으로 다른 언어로 작성된 프로그램은 기계어로 번역(compile)해야 실행할 수 있음
  • 기계어로 작성된 파일은 텍스트 파일이 아니어서 텍스트 편집기에서 내용을 읽을 수 없음
  • 기계어로 작성된 파일의 내용을 보기 위한 간단한 방법은 debug 명령어를 이용하는 것
  • 윈도우7 또는 윈도우10의 32비트에서만 debug 실행이 가능하다.
    (윈도우10이어도 64비트 부터는 debug명령을 실행할 수 없음)
  • 명령 프롬프트 창을 열어서 debug hello.exe를 입력하고 'r'을 입력하면 CPU의 레지스터 상태를 볼 수 있음
  • 'u'를 입력하면 기계어 코드와 어셈블리어 코드를 볼 수 있음
  • debug 명령어를 끝낼 때에는 'q'를 입력함

💡 어셈블리어(assembly language)란?

기계어를 영문자 및 숫자로 치환한 언어

  • 기계어와 어셈블리어는 1:1로 대응
  • CPU 종류에 따라 그 형식과 내용이 모두 다르므로 기계어로 작성된 프로그램들은 한 종류의 CPU에서만 동작
  • 어셈블러(assembler) : 어셈블리어로 작성된 프로그램을 기계어로 번역(assemble) 하는 소프트웨어
    임베디드 시스템 또는 하드웨어를 윈도우 운영체제 또는 리눅스 운영체제에서 개발하고자 한다면 어셈블리어 학습이 필요함

📌 용도별 프로그래밍 언어

과학용 : FORTRAN(FORmula TRANslation)
사무용 : COBOL(COmmon Business Oriented Language)
인공지능 : LISP(LISt Processing), Prolog(PROgrammation en LOGique)
범용 : PASKAL, C, C++
웹용 : PHP(Personal Hypertext Preprocessor), JavaScript
그외 : C#, Python(Monty Python's Flying Circus), JAVA, VisualBasic.Net


📌 JAVA란?

1995년 5월 미국의 Sun Microsystems에서 발표

  • 가전제품에 사용하기 위한 언어로 개발을 시작함
  • 인터넷 상에서 이용할 수 있다는 장점으로 인해 개인용 Apps부터 기업용 Apps까지 사용되고 있음
  • 클라우드(cloud)환경 및 loT(사물인터넷), 빅데이터, 스마트기기 환경에서도 사용할 수 있도록 발전하고 있음

1996년 자바 1.0을 발표

  • 자바 버전 체계의 메이저 버전(소수점 위)이 계속 1.x로 고정
    마이너 업데이트로 여기는 경우들이 있어서 1.5 버전부터 5.0(1.5), 6(1.6)의 형태로 제품 버전을 코드 버전과 별개로 발표함

2021년 java SE 16 버전을 발표


💡 JAVA 기술 소개

  • Oracle에서 JAVA를 프로그래밍 언어가 넘버원 프로그래밍 언어 및 개발플랫폼이라고 이야기 함
  • 비용을 절감하고 개발 기간을 단축하며 혁신을 주도하여 애플리케이션 서비스를 개선함
  • 전세계 510억 개 이상의 JAVA Virtual Machine을 실행하는 수백만 명의 개발자와 함께 JAVA는 기업과 개발자가 지속적으로 선택한 개발 플랫폼이다
  • 대부분의 주요 산업 분야에서 사용됨
    다양한 종류의 기기, 컴퓨터 및 네트워크에서 JAVA 기술을 찾아볼 수 있음
    융통성, 효율성, 플랫폼 이식성, 보안성을 통해 이상적인 네트워크 컴퓨팅 기술로 자리매김함
  • 랩탑에서 데이터 센터, 게임 콘솔에서 과학용 수퍼 컴퓨터, 휴대전화에서 인터넷에 이르기까지 510억 개 이상의 기기에 사용됨

ex. 개인용 컴퓨터 및 대형 컴퓨터, 휴대전화 및 모바일 스마트 기기, 셋톱박스, 프린터, 웹 카메라, 게임, 자동차 네비게이션 시스템, 복권 단말기, 의료기기, 주차료 계산 시스템 등


💡 운영체제에 종속적인 C 프로그래밍 방식

  • Windows용 C 코드 ➡️(컴파일) ➡️ Windows용 실행코드 ➡️(실행) ➡️ Windows용 C코드
  • Unix/Linux용 C 코드 ➡️(컴파일) ➡️ Unix/Linux용 실행코드 ➡️(실행) ➡️ Unix/Linux
  • 애플 MAC OS용 C 코드 ➡️(컴파일) ➡️ 애플 MAC OS X용 실행코드 ➡️(실행) ➡️ 애플 MAC OS

💡 운영체제에 독립적인 JAVA 프로그래밍 방식

공통 <자바 프로그램 ➡️ 컴파일러 ➡️ 바이트 코드>

  • ➡️ Windows용 JVM ➡️(Windows용 실행 파일) ➡️ Windows PC
  • ➡️ Linux용 JVM ➡️(Linux용 실행 파일) ➡️ Linux PC
  • ➡️ MAC용 JVM ➡️(MAC용 실행 파일) ➡️ 매킨토시

📌 JAVA의 기본적인 3가지 특징

💡 객체 지향(object-oriented)언어

  • 프로그램의 기능을 그룹별로 나누고 이것을 조합하여 프로그램을 작성해 나간다는 개념
  • JAVA를 사용하면 보다 복잡하고 수준 높은 프로그램을 만들 수 있음

💡 실행 파일 수준의 호환성

  • 기존의 프로그램은 대응하는 기본 운영체제 상에만 동작함
  • JAVA 프로그램은 JAVA VM(가상머신)이라는 실행환경만 있으면 어디서든지 실행할 수 있음

💡 개발 환경이 충실

  • JAVA 개발 툴은 웹에서 무료로 다운로드할 수 있음
  • 풍부한 기술을 포함하고 있는 라이브러리들을 표준으로 이용할 수 있어 다양한 스타일의 프로그램을 만들 수 있음

📌 JAVA로 할 수 있는 것

CUI 응용프로그램, JAVA 애플릿, JSP, JAVA 빈즈, JAVA 서블릿, GUI 응용프로그램

💡 CUI 응용프로그램

  • 명령 프롬프트나 MS-DOS 프롬프트처럼 문자 기반의 실행환경
  • CUI 환경에서 동작하는 프로그램은 많은 프로그램들의 기본형

💡 JAVA 애플릿

  • Web 브라우저 상에서 동작하는 프로그램
  • HTML 문서 안에서 애플릿을 지정하면 Web 서버로부터 자동으로 다운로드되어 클라이언트의 Web 브라우저 상에서 동작함

💡 JSP

  • HTML 문서와 JAVA 프로그램을 조합하여 동적인 Web페이지를 간단히 만들 수 있음
  • 서블릿 프로그램의 기능을 HTML 파일 내에 스크립트 형식으로 구현하는 기술
  • JSP는 서버에서 서블릿으로 변환되어 실행되고 그 결과를 클라이언트에게 보내줌
  • HTML 문서 안에 JAVA 코드를 삽입하는 형태로 작성함

💡 JAVA 빈즈

  • JAVA로 작성한 프로그램을 부품(컴포넌트)로서 다루는 것
  • 이 부품을 조합하여 애플리케이션을 간단하게 만들 수 있음

💡 JAVA 서블릿

  • Web 서버 상에서 동작하는 JAVA 실행 파일
  • 서버에서 동작하는 다른 형태의 프로그램에는 CGI가 있는데 이것보다 효율적이므로 사용이 증가하고 있음
  • 서버에서 실행되고 실행한 후 Web 페이지를 클라이언트에게 보내줌

💡 GUI 응용프로그램

  • 정해진 폰트의 글자만 보여주는대신 CUI 대신 윈도우처럼 그래픽으로 표시되는 실행환경
  • JAVA를 이용하여 윈도우즈 응용프로그램 같은 프로그램을 만들 수 있음

📌 Java VM (JVM 가상머신)

JAVA로 작성된 프로그램을 실행하기 위한 환경

  • JAVA 프로그램의 실행 파일은 플랫폼에 의존하지 않는 바이트 코드로 만들어짐
  • 바이트 코드를 기종 고유의 코드로 변환하여 실행하는 기능을 가지고 있음
  • JAVA VM만 있으면 기종이나 운영체제에 관계없이 JAVA 프로그램을 실행할 수 있음
  • Windows에는 Windows용 JVM을, Unix/Lnux에는 Unix용 또는 Linux용 JVM을, MAC에는 MAC용 JVM을 설치해야 함
  • JVM의 역할을 하는 소프트웨어를 JAVA 소프트웨어 또는 JRE라고 함

💡 자바 가상머신 탑재 기기

  • Google Maps
  • Sony
  • Ricoh
  • Livescribe

👀 회고

JAVA를 배우기 전에 이론에 대해서도 알고 시작하면 좋을 것 같아 처음부터 재수강을 했는데 어떤 환경에서, 어떤 프로그래밍 언어가 적합한지에 대해서도 다시 살펴볼 수 있어서 좋았다. 아직 언어를 사용함으로서 많이 미숙하지만, 이론에 대해 탄탄하게 쌓고 올라가면 나중에 개발자가 되어 미팅을 하거나 함께 아이디어를 낼 때 큰 도움이 될 수 있을 것이라 생각한다.
내가 뿌리내린 곳에 예쁜 나무가 자랄 수 있도록 끝까지 힘내고 싶다. 내가 하고 있는 공부방식이 남들과 다른 길이더라도 틀린 길은 아니었으면 하는 바램이다. 오늘도 내일도 마저 힘내보자!

profile
전공은 컴퓨터공학, 복수전공은 해킹보안학, 직장은 방학(파워 구직중)

0개의 댓글

관련 채용 정보