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

커비·2024년 10월 12일
0

백엔드 부트캠프

목록 보기
10/49
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개의 댓글