1일차

오라클 JDK 설치

https://www.oracle.com/downloads/

jdk란? 자바 개발 도구, 컴파일러 등이 들어 있다. JDK안에 JRE들어있음 JRE란? 컴파일 된 자바 프로그램을 실행시킬 수 있는 자바 환경을 만드는 것 자바 프로그램을 실행시키려면 JRE 반드시 설치할 것

3가지 구분됨

  • JDK 자바개발도구

    • SE(데스크탑 위에 실행, 계산기 그림판 등) - 기본적인 기능 모두 포함되어있기에 Android개발할때도 사용

    • EE(서버측)

    • ME(모바일, 임베디드쪽)


  • JRE도 설치된다. 웹브라우저에서 쓰는 자바

  • JDK위치설정(bin, lib)

  • lib는 도서관, 자바도서관이라고 할 수 있다, 기본 단위 클래스들이 들어가 있음.

![1554688584166](C:\Users\Playdata\Documents\K\1554688584166.png)

![1554688785146](C:\Users\Playdata\Documents\K\1554688785146.png)

명령어들 위치 지정

![1554688899043](C:\Users\Playdata\Documents\K\1554688899043.png)

가장 위에 올려주자!

![1554688980911](C:\Users\Playdata\Documents\K\1554688980911.png)

.은 현재 디렉토리 의미

환경변수 설정하고 나서 cmd로 확인

![1554689170656](C:\Users\Playdata\Documents\K\1554689170656.png)

이렇게 뜨면 잘 설치된 것.

<프로그램 작성>

메모장으로!

![1554690230108](C:\Users\Playdata\Documents\K\1554690230108.png)

![1554690219167](C:\Users\Playdata\Documents\K\1554690219167.png)

인스톨한 JDK에는 JVM이 딸려있다.


소스코드 - javac 통해 - 이진코드로 변환 이를 - java 가 실행

저장파일은 반드시 첫줄class 뒤의 이름으로 해줘야한다

명령어 실행 javac 컴파일하고자 하는 자바파일명(.java확장자 포함) ----> javac HelloTest.java

바이트코드(HelloTest.class)실행 ---> Source File은 자바JVM(자바가상머신)이 읽을 수 없으므로 반드시 컴파일 과정을 거쳐 ByteCode File로 변환시켜야 함.

인터프리터 HelloTest.class ------Interpreter(java.exe)-------> JVM위에서 실행 명령어 실행) java 실행하고자 하는 자바파일명(.class확장자 포함하지 않음!!) ----> java HelloTest

JAVA Source(.java) -> JAVA Compiler(javac) 통해서 -> Java Byte Code(.class) -> JVM(JAVA Virtual Machine)

Java Source (확장자 .java) 인 파일을 JAVA Compiler 통해 JAVA Byte Code로 컴파일 함

컴파일 된 바이트 코드를 Class Loader(JVM)에 전달

클래스로더는 Dynamic Loading을 통해 필요한 클래스들을 로딩 및 링크하여 Runtime Data area(JVM의 Memory)에 올림

Execution Engine은 JVM메모리 올라온 바이트코드들을 '명령어 단위'로 가져와서 실행

*JVM 동작 원리에 대해서는 이 포스트에 엄청 자세히 나와있음!

<https://steady-snail.tistory.com/67>

  • Class Loader

    • 여러 클래스 로더끼리 부모 자식 관계의 계층적 구조

    • 3가지 원칙

      • 위임 : 클래스 로딩 작업을 상위 클래스로더로

      • 가시 범위 : 하위 클래스로더는 상위 클래스로더 로딩 클래스 볼 수 있지만 반대는 불가

      • 유일성 : 상위 클래스로더가 로딩한 클래스를 다시 로딩하지 않게 유일성 보장

  • Runtime Data Area

    • JVM이 OS위에서 실행되며 할당받는 메모리 영역

  • Execution Engine

    • 바이트 코드를 명령어 단위로 읽어서 실행

JAVA는 interpreter 언어이면서 complier 언어

  • 인터프리터는 고급언어를 한줄씩 번역해서 기계어로 번역하는것

  • 컴파일러는 고급언어 프로그램을 목적프로그램으로 번역 후 링킹 작업 통해 실행 프로그램 생성하는것

  • 자바는 javac 로 컴파일 하고, java로 실행시 중간언어를 한줄씩 자바 인터프리터가 번역하므로 컴파일언어 이면서 인터프리터 언어다!

왜 둘 중 하나 선택 안하고 병행하는건가?

  • 기계어로 컴파일러 하면 매우 효율적

  • 하지만 컴파일러는 기계 종류에 종속적

  • 병행하여 인터프리팅 함으로서 플랫폼에 종속되지 않는다.

  • 자바 바이트 코드는 컴퓨터와 프로그램 사이에 버퍼역할을 한다.(보안적으로 장점)


메모장 실행해보자

public class HelloTest { public static void main(String [ ]args) { System.out.println("안녕 자바~!"); } }

![1554692364114](C:\Users\Playdata\Documents\K\1554692364114.png)

짠!

이제 editplus 툴을 사용해보자~!

<https://www.editplus.com/kr/download.html>

![1554693297342](C:\Users\Playdata\Documents\K\1554693297342.png)

요래 생김~!

![1554693619853](C:\Users\Playdata\Documents\K\1554693619853.png)

![1554693747944](C:\Users\Playdata\Documents\K\1554693747944.png)

도구 설정


프로그래밍을 잘 하려면

  1. 프로그램의 구성요소

    • 필드(field)

      • 변수라는 용어와 혼용해서 사용

      • 데이터 속성, 자료구조, 데이터를 담는 그릇

    • 메소드(method)

      • 함수

      • 기능, 행위

    • 클래스(class)

      • 자바프로그램 기본단위(파일)

      • 필드와 메소드를 담는 울타리(template)

  1. 구성요소 구분

    • 변수, 필드

      • 첫글자 소문자

      • 단어 뒤에 ()소괄호 포함 X

    • 메소드

      • 첫글자 소문자

      • 단어 뒤에 ()소괄호 포함O

    • 클래스

      • 첫글자 대문자

    • ex) System.out.print("하이");

      • System = 클래스

      • out = 변수,필드

      • print() = 메소드

        • 이건 약속이고 관례니 지키자!

  2. 구성요소 형식

    *식별자(Identifier) 이름 규칙(변수명, 메소드명, 클래스명에 적용)

    1. 첫글자 숫자 불가능

      • cup1, cup2 ( O )

      • 1cup, 2cup ( 에러 발생)

    2. 특수문자 사용불가

      • cup@ cup% (불가)

      • 예외) _와 $는 사용 가능

        • String name;

        • String studentName;

        • String student_name;

    1. 한글사용 가능 => 자바는 유니코드(16bit)를 지원하기 때문에 가능

      • String 학생이름; (가능), 하지만 가독성때문에 지양할 것

    1. 예약어 사용 금지 (에러발생)//예약어란 프로그램 내에서 이미 의미와 용법이 지정되어 사용되는 단어

      • int class; (안됨)

      • int public; (안됨)

      • int if; (안됨)


      enum(이늄)

      enum이 뭐지? ...

      클래스?... 상수?... 배열?...


      *자바 자료형(DataType)

      => 기본 자료형 8개 + 클래스자료형(알파, 대문자로 시작하는) 1개

      • 문자 : **char**

        char ch; // 변수 선언 : ch변수에 문자데이터를 받겠음

        ch = 'a'; // 변수 초기화 ( 값을 할당 )

        ch = '가';

        ch = '3';

        ch = '길동'; (X) // 작은 따옴표에는 두개 이상의 문자가 올 수 없다.

        **String** str = "길동"; // 문자열 (문자의 나열 : 0 개 이상의 문자를 표현할 때 사용)

         

      • 숫자

        • 정수

          • **byte** : (1byte)

            • 1byte == 8bit == 2의 8승 == 256개 ( -128 ~ 0 ~ 127 )

            • byte b;

              • b = -128;

              • b = 127;

              • b = 0;

              • b = 128; (에러)

              • b = -129; (에러)

          • **short** : (2byte)

            • 2의 16승

          • **int** : (4byte)

            • 가장 많이 사용

          • **long** : (8byte)

        • 실수

          • **float** : (4byte)

          • **double** : (8byte)

            • 많이 사용

            • double d = 3.14;

      • 논리 : **boolean** (반복문, 제어문과 함께 많이 사용)

        • false과 true로만 표현 (자바는 0과 1 안된데...)

          • boolean b1;

          • b1 = true;

          • b1 = false;

          • b1 = 'true'; (에러)

          • b1 = "false"; (에러)


    short과 int와 long

    • 8비트에서는 short int, 32비트에서는 long int로 처리하는것이 빠르다.

    • 64비트라면 8byte쓰는게 빠를거 같지만 아니다. 4byte가 빠르다.

    • 64비트에서는 short보다 int가 빠르다.

    • 그렇다고 모든것을 int로 하면 메모리 낭비가 심각 할수도 있다.

    float과 double

    실수형 오차 발생 이유

    • 변수

      • 형식) 자료형 + "(공백)" + 변수명 + ;

        -> 변수선언!!

        커피 v1;

        물 v2;


    char , byte, short, int , long, float, double, boolean, String

    • 메소드★

      • 형식)

        리턴자료형 메소드명 ( 매개변수 )

        {//메소드 시작

         

        }//메소드 끝

        ===> 매개변수의 다른 용어 : 인수, 인자, argument, parameter

        void gildong ( ) //void는 자료형 아닌데... -> 가져올 데이터 없음, 주는게 없네 ()에 넣어줘 { 1. 문앞으로 이동; 2. 문열기; 3. 자기자리로 되돌아 오기; return; //생략가능 }Coffee lime ( ) { 1. 자판기 앞으로 이동; 2. 동전투입; 3. 커피버튼클릭; 4. 커피를 뽑아서 되돌아오기; return 커피; //생략 불가 }Cola juwon ( int coin ) { 1. 자판기 앞으로 이동; 2. 동전투입; 3. 콜라버튼클릭; 4. 콜라를 뽑아서 되돌아오기; return 콜라; //생략 불가 } //밖에 있는 데이터가 int coin 통해 주원에게 들어옴 그럼 1,2,3,4를 하겠다는 뜻, 이 결과가 Cola를 통해 빠져나감

        매소드는 이렇게 나열임, 순차적으로 진행하고 되돌아온다. 이름을 불러줘야 실행됨.

    • 클래스

      형식)

      class 클래스명 {//클래스 시작 }//클래스 끝
      • class, 클래스명, 클래스 내용 이렇게 3개만 있으면 된다.

      class My { //변수 선언 int su; //메소드 정의 void hello() { } }
  • 진주의 질문타임

애기가 아까 선언하자마자 초기화 하면 안돼? 이래짜나

int su (선언)

su = 3 (초기화)

이거 말고

int su = 3 (선언과 함께 초기화) 이케

가능한데 이게 경우마다 조금씩 다르게 쓰여

예를 들어서 만약에 이 전체를 다 dan = 5 로 한다면

선언과 함께 초기화를 쓰면 되는거야

하지만 *1 *2 는 dan이 5였으면 좋겠고 * 3은 dan이 6이었으면 좋겠고 *4 *5 는 dan이 8이었으면 좋겠어

이럴수 있겠지?

근데 선언과 함께 초기화를 하면

그 밑에

선언은 한번만 할수 있어

선언은 오직 한번만!

이건 최적화가 안되서

결론은 선언과 함께 초기화는 지금 배우는 입장에서는 아무렇게나 사용해도 됩니다.

하지만 시간이 갈수록 선언은 제각각 하는 경우가 생길텐데... 이왕이면 선언과 초기화를 따로 하는게 좋아요

int x;

x = 5;

이건 5를 x에다가 넣어라 라는 뜻이고

x == 5는 x랑 5랑 같다 라는 뜻이야

==이거는 if문쓸때 나중에

int x = 1;

if(x==5)

{

}

이런식으로 조건문 안에 x랑 y랑 같으면 밑에를 실행해줘 이렇게 쓰이는거야

만약에 x가 5이면 조건문을 실행해라 이렇게는 쓰이지 이러면 조건문

x = 5 이거는

x == 5 물어보는거야 ===개?

int x = 5;

double y = 5;

x == y 같음 이렇게 결과가 나오는데

x===y 안같음 이렇게 나와.

x=5 같다생각하면

== 같아?

같은고야?

같다 가 아니라 같아아?

+ Recent posts