TIL(Today I Learned)/java

[내일배움캠프/2주차] JAVA 문법종합반 1주차 강의 1

jy3574 2024. 10. 8. 21:49

<목차>

1. JAVA 언어에 대한 이해

2. JVM- JAVA 실행환경


 

JAVA 언어에 대한 이해

 

-프로그래밍 언어는 사람과 컴퓨터 사이의 소통을 위해 사용 = 사람이 컴퓨터한테 대화를 시도한다

 

<개발 언어의 역사>-그냥 이런게 있다~

 

1. A언어 (A programming Language)

-첫 개발언어, 1960년대

-핵심기능: 입출력, 문맥

-프로그램을 만들기 위해 기본적으로 필요한 기능(입출력, 문맥)만 구현 가능한 언어

-초창기의 기초적인 목적을 달성하기 위한 언어

 

2. B언어

-bell 사에서 1960년대 개발

-핵심기능: A언어 기능 + 기계식 데이터 타입, 연산기능, 메서드

-A언어 기능에 데이터를 담을 수 있는 타입이 생기고, 데이터를 연산하고 묶엇서 관리할 수 있는 메서드 구현이 가능한 언어

 

3. C언어

-1970년대

-핵심기능: B언어 기능 + 자료형 데이터 타입, 자료구조

-B언어 기능에 다양한 데이터 타입을 정의하고 자료구조에 담을 수 있는 언어

 

4. JAVA언어

 

-어디서나 동작 가능한 객체지향 언어, 자바커피에서 이름을 땀

-1990년대

-핵심기능: C언어 기능 + 공통실행환경(JVM), 클래스, 객체

-공통실행환경(놀이터), 클래스(바구니 틀), 객체(바구니), 메서드(포장지), 자료구조(분류통)

-데이터와 메서드를 담는 클래스를 통해 객체를 만들 수 있는 언어

 

<JAVA를 배워야 하는 이유>

-개발 언어의 역사를 따라 발전해 온 언어 중 가장 많이 쓰이는 개발 언어 중 하나

 

1. 공통실행환경이 있어 여러기기에서 실행이 가능

 

2. 코드를 이해하기 쉽고 유지보수가 쉬움

-JAVA는 대표적인 객체지향언어이다.

----객체(object)는 크게 특징과 행동을 가지고 있는 것이라고 보면되는데 사람을 예로 들면

--------특징: 이름, 나이, 혈액형...

--------행동: 걷는다, 숨쉰다....

이렇게 java언어도 특징과 행동을 가지고 있다고 보면 된다.

 

3. 안정성이 높아서 프로그래밍 오류를 방지하고 보안상 안전하다.

-작성된 문맥을 바이트 코드로 변환하는 컴파일러(변환기)가 먼저 오류를 체크한다.

-지원하는 보안 기술이 많다.

 

4. 대규모 앱 개발이 가능하다.

-네트워크 및 데이터베이스 연결 및 통신 등의 작업을 처리하는 API를 제공한다.

 

5. 다양한 개발 도구와 라이브러리를 사용할 수 있다.

-앱 개발에 필요한 작업을 보다 쉽게 처리할 수 있다.

 

JVM
Java Virtual Machine
자바 가상 머신

-가상머신 : 가상의 기기를 만들어주는 것

-여러가지 기기 위에 java 프로그램을 실행시킬 수 있는 가상의 기기를 만들어주는 것

-JVM을 깔아주면 어느 장비에서든 똑같이 Java가 실행된다.

(어디든 땅 위에 잔디를 깔면 뛰어 놀 수 있는 놀이터가 되는 것과 같은 의미)

 

<Java 의 구성>

*바이트 코드 : java 프로그램 변환 코드

-내가 작성한 코드가 운영체제가 읽을 수 있는 코드(바이트 코드)로 java 컴파일러(compiler)가 변환한 코드

 

*Java compiler

.java -----> .class 로 변환해줌

.java는 사람이 이해할 수 있는 코드로 컴퓨터가 읽을 수 없다. 그래서 컴파일러로 변환해줘야한다.

.class는 운영체제가 이해할 수 있는 코드

 

*인터프리터(interpreter) : Java.class 코드 해석기

-운영체제가 읽은 바이트 코드를 기계가 실행할 수 있는 기계어로 번역

*JIT 컴파일러 : 빠른 java.class 코드 해석기

-인터프리터의 효율을 높여주는 서포트 해석기

-인터프리터와 JIT 컴파일러는 한세트라고 보면 됨

 

*메모리 영역 : java 데이터를 저장하는 영역

-운영체제로부터 JVM이 할당받은 메모리 영역

 

*클래스 로더 : java.class 바이트코드를 메모리 영역에 담는 운반기

-JVM으로 class(바이트코드)를 불러와서 메모리에 저장

 

*가비지 컬렉터 : java 쓰레기 청소기

-메모리 영역에서 안쓰는 데이터를 주기적으로 흡수해가는 청소기


*Runtime: 프로그램이 실행중인 상태

*Runtime system: 프로그램이 실행중인 상태를 관리하는 시스템

 

*JVM 환경구성

1. .java ----> .class

2. class 실행

 

<JRE>

-Java Runtime Environment, 자바 실행 환경

-자바 프로그램만 실행시킬 수 있음(말 그대로 실행환경만 만들어주는 것)

-.class 파일만 실행 가능하다

 

<JDK>

-Java Development Kit, 자바 개발 키트

1. .java ----> .class 로 변환해주는 java compiler(javac)의 기능이 있다.

2. JRE의 기능을 포함하고 있음.

3. 코드를 디버깅하는 jdb 등의 기능이 있다.

 

*JDK의 디버깅 기능

-jdb 기능이라고 하는데 이 기능을 통해서 실행중인 프로그램의 코드 실행을 볼 수 있다.

-디버깅 : 코드들을 한줄씩 객체와 메소드를 수행하면서 변수들도 변화는 과정을 볼 수 있도록 하는 기능

-내가 작성한 코드라인에 "중단점"을 설정하고 "디버그" 모드로 프로그램을 실행하면, 중단점의 코드라인을 수행할 때 프로그램 흐름이 일시정지 되면서 변수들을 볼 수 있게 도와준다.

-디버깅 = 중단점 일시정지 + 코드라인 단위 수행

<디버깅하는 방법>

1. 디버깅할 때 일시정지할 중단점 설정

---코드 라인의 숫자 옆을 클릭하면 숫자에 빨간 동그라미 표시됨

 

2. 우측 상단에 벌레 버튼 클릭하면 디버깅 시작됨

 

3. 디버깅이 시작되면 중단점에 멈추면서 일시정지 됨

---일시정지 된 상태에서는 변수가 들어있는 값을 볼 수 있음

 

기본 코드에 대한 이해

-java 앱을 실행할때 제일 먼저 클래스의 main 메서드를 실행시키는게 기본

*public

-클래스 경로 외부에서 실행시킬 수 있다고 표시해주는 접근제어자

-클래스 경로 외부에서 호출 못하도록 막는 접근제어자는 private, protected가 있음

-공공의, 공통의 이런 의미로 어디까지 접근하게 할거냐? 정도의 의미

 

*class

-객체를 만드는 클래스라고 선언

-결국 .class로 컴파일되어야 하기 때문에 class 라는 키워드를 통해 .java 파일을 만든다

-class 안에는 들여쓰기 되어있는 하위요소가 들어있음, 하위요소는 {중괄호}로 구분

 

*main -클래스 명

-파일명과 일치시켜야함

---일치시켜야하는 이유 : java 컴파일러가 바이트코드로 변환했을 때의 파일 확장명과 일치되야하기 때문

 

 

*main

-main 메서드 정의

-main 이라는 class를 만들고 클래스 로더로 메모리 영역으로 들어가서 실행시킴

 

*public

-외부에서 실행시킬 수 있다고 표시해주는 접근제어자

 

*static

-java 컴파일러가 바이트 코드로 변환할 때 미리 정의되는 메서드 표기

-앱 실행시 한번만 정의되며 static 메서드 또는 변수(데이터)끼리만 호출할 수 있음

 

*void

-메서드의 응답 값을 정의하는 곳

-void는 응답할 값이 없다는 정의

-int=정수, char=문자, string=문자열 등...

-output

 

*(String[] args)

-메서드가 시작될 때 넘겨받을 데이터들(변수들)

-input

-String[]: 문자열 여러개 데이터 타입

-args : 문자열 여러개 데이터의 이름

 

*System.out.print()

-이 메서드를 사용하면 출력창에 괄호 안으로 전달된 데이터를 출력해줌

 

*System.out.println()

-이 메서드를 사용하면 출력창에 괄호 안으로 전달된 데이터를 출력 후 줄바꿈을 해줌

 

*주석

-설명을 달아놓는 기능

-실제 프로그램 실행에는 영향을 미치지 않는 유령코드

-개발자들끼리 협업할 때 코드에 대한 설명을 추가하거나 주의사항을 적어놓을 때 사용

-주석 남기고 싶은 코드 앞에 // 를 붙이면 됨


<용어 정리>

*데이터 : 컴퓨터가 정보를 담는 자료값

 

*데이터 타입(자료형) : 데이터의 유형 (정수, 문자, 소숫점)

 

*자료구조 : 데이터 여러개를 분류해서 담을 수 있는 분류통

 

*문맥 : 개발언어로 표현한 프로그램의 동작 흐름

 

*매서드 : 데이터와 문맥을 감싸는 포장지

 

*공통실행환경

-여러 기기의 운영환경에서 실행할 수 있도록 판을 깔아주는 실행환경

-어떤 기기에서 실행을 해도 똑같이 실행되는 실행환경

 

*운영체제

-기기가 프로그램을 실행시키는 운영환경

-window, ios, android, linux...

 

*앱

-운영체제 위에서 실행되는 프로그램

-우리가 흔히 생각하는 어플리케이션이랑은 다른 개념

-Mobile App, Server App....

 

*괄호

() : 소괄호

{} : 중괄호

[] : 대괄호


*사용하는 프로그램 : intelli j