1일차
오라클 JDK 설치
https://www.oracle.com/downloads/
jdk란? 자바 개발 도구, 컴파일러 등이 들어 있다. JDK안에 JRE들어있음 JRE란? 컴파일 된 자바 프로그램을 실행시킬 수 있는 자바 환경을 만드는 것 자바 프로그램을 실행시키려면 JRE 반드시 설치할 것
3가지 구분됨
-
JDK 자바개발도구
-
SE(데스크탑 위에 실행, 계산기 그림판 등) - 기본적인 기능 모두 포함되어있기에 Android개발할때도 사용
-
EE(서버측)
-
ME(모바일, 임베디드쪽)
-
-
1~2년 단위로 업데이트 되다가 9버전부터 6개월 단위로 릴리즈
-
실제 현업에서는 8버전 사용함, 그 이하버전도...
-
수업도 8버전 기준으로 한다, 관련된 툴에서 문제 발생 줄이기 위해
-
[Java SE 8u201 / Java SE 8u202](https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
-
server JRE, JRE가 JDK에 포함되어있다.
-
JRE도 설치된다. 웹브라우저에서 쓰는 자바
-
JDK위치설정(bin, lib)
-
lib는 도서관, 자바도서관이라고 할 수 있다, 기본 단위 클래스들이 들어가 있음.


명령어들 위치 지정

가장 위에 올려주자!

.은 현재 디렉토리 의미
환경변수 설정하고 나서 cmd로 확인

이렇게 뜨면 잘 설치된 것.
<프로그램 작성>
메모장으로!


인스톨한 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("안녕 자바~!"); } }

짠!
이제 editplus 툴을 사용해보자~!
<https://www.editplus.com/kr/download.html>

요래 생김~!


도구 설정
프로그래밍을 잘 하려면
-
프로그램의 구성요소
-
필드(field)
-
변수라는 용어와 혼용해서 사용
-
데이터 속성, 자료구조, 데이터를 담는 그릇
-
-
메소드(method)
-
함수
-
기능, 행위
-
-
클래스(class)
-
자바프로그램 기본단위(파일)
-
필드와 메소드를 담는 울타리(template)
-
-
-
구성요소 구분
-
변수, 필드
-
첫글자 소문자
-
단어 뒤에 ()소괄호 포함 X
-
-
메소드
-
첫글자 소문자
-
단어 뒤에 ()소괄호 포함O
-
-
클래스
-
첫글자 대문자
-
-
ex) System.out.print("하이");
-
System = 클래스
-
out = 변수,필드
-
print() = 메소드
-
이건 약속이고 관례니 지키자!
-
-
-
-
구성요소 형식
*식별자(Identifier) 이름 규칙(변수명, 메소드명, 클래스명에 적용)
-
첫글자 숫자 불가능
-
cup1, cup2 ( O )
-
1cup, 2cup ( 에러 발생)
-
-
특수문자 사용불가
-
cup@ cup% (불가)
-
예외) _와 $는 사용 가능
-
String name;
-
String studentName;
-
String student_name;
-
-
-
한글사용 가능 => 자바는 유니코드(16bit)를 지원하기 때문에 가능
-
String 학생이름; (가능), 하지만 가독성때문에 지양할 것
-
-
예약어 사용 금지 (에러발생)//예약어란 프로그램 내에서 이미 의미와 용법이 지정되어 사용되는 단어
-
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
-
double이 더 정확성을 갖는다.(메모리를 아껴야 하는 임베디드가 아니라면)
-
속도에서는 별 차이는 없는거 같음...
-
근데 float은 32비트 double은 64비트 연산
-
일부 컴파일러에서는 double이 더 빠름
-
그러니까 그냥 double을 쓰자?!
실수형 오차 발생 이유
-
10진수에서 2진수로 변환할 때 발생하는 구조적 문제
-
변수
-
형식) 자료형 + "(공백)" + 변수명 + ;
-> 변수선언!!
커피 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개만 있으면 된다.
-
-
-
진주의 질문타임
애기가 아까 선언하자마자 초기화 하면 안돼? 이래짜나
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 같다생각하면
== 같아?
같은고야?
같다 가 아니라 같아아?
'클라우드 기반 웹 개발자 과정 공부 > JAVA' 카테고리의 다른 글
190415 Day6 이클립스 설치, 접근지정(제한)자, 자기참조연산자, 인터페이스, final, 클래스와 인터페이스 간의 상속 문법 (0) | 2019.04.15 |
---|---|
190412 Day5 Escape Character, printf, OOP, 오버라이딩, 오버로딩, 생성자 (0) | 2019.04.12 |
190411 Day4 자바의 입력 (0) | 2019.04.11 |
190410 Day3 조건문 이어서, 반복문 (0) | 2019.04.10 |
190408 Day2 주석문, 구성요소 사용법, 연산자, 조건문1 (0) | 2019.04.09 |