본문 바로가기
Today I learned

JAVA 1주차 강의정리

by soheemon 2018. 10. 14.



JAVA 1주차 강의 정리


프로그래밍

-프로그래머가 컴퓨터[각주:1]에게 일을 시키는 행위

프로그래머

- 프로그램을 만드는 사람


프로그램

- 컴퓨터에게 일을 지시하는 수단


컴파일

- 컴퓨터가 알아 들을 수 있게 기계어로 번역하는 과정. 이과정은 컴파일러가 진행한다.

기계어

- CPU가 알아들을 수 있는 언어. 0과 1로 이루어져 있다.


고급언어

- JAVA C 처럼 사용자에게 친화적인 언어

저급언어

- 어셈블리어처럼 기계어에 취중한 언어.


JAVA의 특징

- 컴퓨터가 아닌 다른곳에 프로그램을 심으려고 만들어짐.

- 플랫폼에 구애받지 않는다.


플랫폼

- 프로그램이 실행되는 환경. O/S나 프로세서가 플랫폼이 된다.

VM

- 플랫폼에 구애받지 않는 대신에 각 환경에 맞는 VM을 설치해야 한다.

- VM은 플랫폼에 의존적이다.

- 프로그램을 플랫폼에 따라 재컴파일 할 필요 없이 VM을 설치하면 되기때문에 간편하다.

인터프리터

- vm은 CPU가 읽을 수 있게 중간코드를 기계어로 번역해준다.[각주:2]

- vm이 중간코드(바이트코드, .class)을 기계어로 만들어주는 과정을 인터프리터 라고 한다.

- 자바 컴파일러는 기계어를 생성하는것이 아니라 자바 VM이 읽을수있게 컴파일 하는것이다.


JVM

- 자바가상머신. 운영체제에 종속적이며 jdk와 jre에 들어있다.

- 바이트코드(중간코드)를 기계어로 번역해서 전달하는 역할을 한다.

JRE와 JDK

- JAVA로 만들어진 프로그램을 실행하려면 JRE가 필요하다.[각주:3]

- JRE는 자바프로그램을 구동하는데 필요한 실행환경을 제공한다.

- JDK는 자바 개발에 필수적인 도구이머, JRE를 포함한다.


프로젝트

- html이나 자바 파일들이 폴더들이 모여있는 일종의 '폴더'다.[각주:4]

- 카멜케이스를 사용한다.[각주:5]


자바/이클립스

- 자바는 문장(;)과 블록({})으로 이루어져있다. 

- 이클립스는 저장을 하면 자바 파일을 .class파일로 만든다.

예약어

- JAVA가 이미 쓰고있는 단어.[각주:6]

package

- 이 파일(자바)은 어느 폴더 안에 들어있어요. 표시해준다.

- 경로를 보지않고도 해당 파일이 어디에 있는지 이해 할 수 있어야 한다.

class

-class 옆에는 클래스명을 표시한다.

- { = 블록이라고 한다.

- 클래스를 감싸고 있는것은 클래스 블록이다.

코딩컨벤션

- 클래스명 다음에 한 칸 띄우기.[각주:7]

- 클래스 구현부 첫줄은 비운다.(메소드는 아니다.)

- 클래스명은 파스칼케이스를 사용한다.

- 프로젝트명, 메소드명, 변수명은 카멜케이스를 사용한다.

- 상수는 스네이크케이스를 사용한다.

함수

- 함수는 소괄호가 있다. 소괄호 앞에 있는것을 함수명이라 한다.

- 소괄호 안에 있는것을 인수(매개변수)라고 한다.[각주:8]

- public static

- void 함수의 반환 타입이다.


함수2

- 처리를 작성(기술)하는 블록을 함수라고 한다.[각주:9]

- 자바스크립트에는 함수가 있다.

메소드

- class안에 들어있는 함수를 메소드라고 한다.

- 자바는 클래스 밖에있는 함수가 없기 때문에 JAVA에는 함수가 없다고 할수있다.

블록

- 블록은 구현부라고 한다.[각주:10]

.class

-하나의 프로젝트에는 여러개의 클래스파일이 있다.

- 자바는 클래스파일들로 쪼개져 있다.


객체지향

- 객체지향언어는 '객체'로 이루어져 있다.

- '누구의입장'이냐에 따라서 객체일 수도 있고 아닐수도 있다.[각주:11]

- 패키지(프로젝트)의 입장에서 main메소드는 객체이다.

- 클래스의 입장에서 main은 객체이고 멤버이다.


변수 객체 멤버 멤버변수 필드

-자바는 변수와 메소드로 이루어져 있고 블록과 문장으로 이루어져 있다.

-변수는 값을 보관하거나 유지한값을 추출하거나 대입할 때 사용한다.

- 더블쿼트에션(") = 문자열이란것을 의미한다.[각주:12]


- 멤버변수(필드) = 메소드에 종속되어있지 않은 class를 구성하는 멤버 혹은 객체.

- 지역변수 = 메소드 안에 들어있는 변수(는 멤버변수도 아니고 필드도 아니다.)


자바는 타입언어다.

- 자바에서는 멤버를 선언할 때, 반드시 앞에다 타입을 적어야 한다.[각주:13]


변수 리터럴 

- 더블쿼테이션(")으로 감싸져있는것을 리터럴이라 한다.

- 리터럴이란 변수에 넣을 값을 구체화 한것이다.

- 대입연산자(=)란 오른쪽의 값을 변수에 대입한다는 의미다.[각주:14]

- 변수는 메모리에 저장되며, 변수에 넣을(복사할) 리터럴은 메모리에 저장되어 있다.


호출함수

- 구현부가(중괄호가) 없는 함수를 호출함수라고 한다.

- 호출함수는 함수를 호출하는 행위다.

- 호출시에는 변수를 추출하며, 이때 앞에 타입을 적지 않고 변수명만 적는다.[각주:15]

 

System.out.println(); 파헤치기 

- System은 클래스다. 따라서 println은 System클래스 안에있는 메소드다.

- (.)은 연결연산자 라고 한다.


메소드 오버로딩

- 인수의 갯수가 맞지 않으면 호출이 안된다.

- 메소드를 호출할때 타입과 갯수가 맞지 않으면 호출이 안되기 때문에 타입과 갯수를 맞추는 과정을 말한다.


실습

- syso 까지 입력하고 ctrl + space를 입력하면 자동완성된다.


메모리 종류

- 메모리 = 프로그램이 실행되는 공간. 작업공간

- 레지스터 = CPU는 한번에 하나밖에 기억을 못한다. 이점을 보완하기 위해 CPU전용 기억공간을 사용한다. 이것이 레지스터이며 엄청 빠르고 비싸고 작다.[각주:16]

- RAM = 레지스터보다 느리다. 전기가 공급되지 않으면 사라진다.

- SSD HDD = 전원이 나갔다고 해도 자료가 안사라진다.


프로그램이 시작되는 과정

- Java 파일을 저장한다. 자동으로 컴파일되어 바이트코드가 SSD에 저장된다.

- play 버튼을 누르면 JVM이 실행된다.

- JVM은 SSD에 있다가 실행되는 순간 RAM에 올라간다.

- 실행되면 class파일을 JVM이 똑 떼서 CPU에 주면 CPU가 처리할 수 있는 부분을 처리하고 초과하는 부분은 레지스터에 저장하고 반복....


JVM이 CPU에 똑떼서 건네주는부분 자세히

- JVM은 클래스파일을 탐색한다.

- class파일을 발견하면

- static이라는 글자를 검색한다.[각주:17]

- 없으면 실행을 종료한다.(JVM 끝)

- static을 찾으면.. 집어다 메모리의 class 영역에 올린다.

- 그다음 static인 main을 메모리에 올린다. main자체가 아닌 main의 참조값이 들어간다.

- 실제 main 메소드는 stack이라는 영역에 저장된다.[각주:18]

- main 안에는 호출함수가 들어가있다.[각주:19]

- 클래스 영역이 먼저 생성된다. 따라서 main은 static영역의 name을 바라볼 수 있다.[각주:20]

- 호출이 끝나면 가비지 컬렉터가 모든 과정을 지켜보고 있다가 자신의 행위를 다 애를 없앤다.
















컴파일의 결과는 바이트코드(중간코드)라고 한다.













C같은 경우에는 컴파일러가 O/S와 프로세서에 따라 각각 다르다(플랫폼에 의존적이기 때문이다.)
C는 중간코드(바이트코드)가 없다.


자바는 프로그램을 짜면 컴파일러가 컴파일하여 중간코드(바이트코드, .class)를 생성하는데. 이 class파일은 플랫폼에 구애받지 않는다.


JIT컴파일 = 실행시점에서 인터프리트 방식으로 기계어 코드를 생성하면서 그 코드를 캐싱하여 같은 함수가 여러번 불릴때마다 매번 기계어 코드를 생성하는것을 방지한다.


자바 컴파일러가 자바 프로그램 코드를 바이트코드로 변환한 다음, 실제 바이트코드를 실행하는 시점에서 JVM이 바이트 코드를 JIT컴파일을 통해 기계어로 변환한다.











  1. 여기서 컴퓨터는 CPU를 의미한다. [본문으로]
  2. 자바가 느린이유는컴파일러가 중간코드를 생성하고 그것을 VM에서 인터프리팅하기때문이다. 하지만 현재는 C와 속도가 같다. JIT컴파일을 사용하기 때문이다. [본문으로]
  3. JRE에는 JVM이 들어있기 때문이다. 인터넷을 하다보면 자바 개발을 안하는데도 자바를 설치하래? = 이때 설치하는게 JRE이다. [본문으로]
  4. 실제 프로젝트생성은 AA가 생성하기 때문에 낮은연차에선 생성할 일이 거의 없다. [본문으로]
  5. 대문자는 소문자로 바꾼다. 두개의 단어를 합칠때 두번째 단어의 앞자리를 대문자로 바꾼다. [본문으로]
  6. package, public, class, static, void... [본문으로]
  7. public class Step1One *{ 에서 *에 해당한다. [본문으로]
  8. String[] args일때, String[]은 자료형(타입) args는 인수명(매개변수명) [본문으로]
  9. 자동차라는 클래스가 있을때 기어D는 앞으로 간다라는 함수가 될 수 있다. [본문으로]
  10. 클래스를 구현한다면 클래스 구현부. 메소드를 구현한다면 메소드 구현부 [본문으로]
  11. 칠판의 지우개는 칠판의 객체이다. 책상의 패드는 책상의 객체이다. 사람의 얼굴에서 눈 코 입은 사람의 객체이다. 지구의 입장에서 한국 미국 중국은 객체이다. 하지만 사람의 입장에서 지우개는 객체가 아니다. [본문으로]
  12. 변수의 타입은, 예를들어 String은 문자열을 담을수있는 주머니는 문자열밖에 못담는다 라는 의미로 표시한다. [본문으로]
  13. 선언할때 타입을 적는 언어를 정적 타입언어라고 한다 자시성이 좋다.(자바) 반면 선언할때 타입을 적지 않는 언어를 동적 타입언어라고 한다.(자바스크립트) [본문으로]
  14. 예) String subect = "자바 Step1 1주차";란 String타입의 subject라는 변수를 선언하고 "자바 Step1 1주차"라는 문자열로 초기화 한다는 의미다. [본문으로]
  15. System.out.println(name); [본문으로]
  16. 그래서 SSD를 쓴다 [본문으로]
  17. main이 먼저가 아니다!!!! [본문으로]
  18. Main만의 스택 영역이다. [본문으로]
  19. main 메소드안에 System.out.println(name);이 있다고 가정할때, main안에 호출함수가 있다고 할 수 있다. [본문으로]
  20. Class aClass { String name .... public static void main() { .... System.out.println(name); 이런 클래스와 필드 main 메서드가 있을때. main이 먼저 올라간다면 main안의 호출함수가 호출될때 name을 바라볼 수 없다. [본문으로]

'Today I learned' 카테고리의 다른 글

singleton pattern  (0) 2018.10.26
JAVA 2주차 강의 정리  (0) 2018.10.24
4. 상속과 캐스팅  (0) 2018.09.16
3. 캡슐화 방법, 상속  (0) 2018.09.16
2. Class개념과 기본적인 Java Programming  (0) 2018.09.16

댓글