이 글은 fast campus 강의를 기반으로 작성한 글입니다.
컴파일
프로그래밍언어로 컴퓨터가 실행가능한 기계어로만드는일입니다..
컴파일러
자바어를 어셈블리어로 변환하는 기능입니다.
자바 컴파일 순서
1. 코더 본인이 자바로된 소스코드를 작성한다. (.java)
2. 그 소스파일을 자바 컴파일러가 컴파일한다.
3. 그때 자바 파일들은 .class 파일이기때문에 컴퓨터가 읽을수없고 JVM이 읽을수있는 코드이다.
4. 컴파일된 바이트 코드들을 JVM class Loader로 전달.
5. 그후 클래스로더는 동적로딩을 통해 클래스들을 로딩 및 링크 후, JVM메모리에 올림.
클래스 로더 세부 동작
a. 로드 : 클래스 파일을 가져와서 JVM의 메모리에 로드한다.
b. 검증 : 자바 언어 명세(Java Language Specification) 및 JVM 명세에 명시된 대로 구성되어 있는지 검사한다.
c. 준비 : 클래스가 필요로 하는 메모리를 할당(필드, 메서드, 인터페이스 등등)
d. 분석 : 클래스의 상수 풀 내 모든 심볼릭 레퍼런스를 다이렉트 레퍼런스로 변경한다.
e. 초기화 : 클래스 변수들은 적절한 값으로 초기화한다.(static 필드)
6. 실행엔진(Execution Engine)은 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와서 실행. 이때, 실행 엔진은 두가지 방식으로 변경한다.
i. 인터프리터: 바이트 코드 명령어를 하나씩 읽어서 해석하고 실행한다. 하나하나의 실행은 빠르나, 전체적인 실행 속도가 느리다는 단점을 가짐.
ii. JIT 컴파일러(Just-In-Time Compiler) : 인터프리터의 단점을 보완하기 위해 도입된 방식으로 바이트 코드 전체를 컴파일하여 바이너리 코드로 변경하고 이후에는 해당 메서드를 더 이상 인터프리팅 하지 않고, 바이너리 코드로 직접 실행하는 방식이다. 하나씩 인터프리팅하여 실행하는 것이 아니라 바이트 코드 전체가 컴파일된 바이너리 코드를 실행하는 것이기 때문에 전체적인 실행속도는 인터프리팅 방식보다 빠름.
자바 JDK 설치 : https://www.oracle.com/java/technologies/downloads/
자바 JRE 설치: https://www.oracle.com/java/technologies/downloads/#java8
자바에서 소스코드를 작성할때 Package 를 안만들고 작성하면 디폴트값으로 들어갑니다.
페키지는 일종의 소스의 묶음이라고 생각하면됩니다.
페키지의 이름은 숫자가 들어가도 무방 하지만 소문자로 쓰는것이좋습니다. 일종의 컨벤션... 통상적으로 쓰는 규약이라고보면됩니다.
클래스이름은 대문자로 시작하는것이 좋으며 이것도 컨벤션의 일종이라고 할수있습니다.
참고로 인텔리제이에서 아래의 메인메서드 단축키는 pvsm +'TAB" 키이며
public static void main(String[] args) {
}
}
아래의 단축키는 sout + "TAB"입니다.
System.out.println();
자바 클래스가 구동되는것은 메서드가 아니라 웹서버에 의해 구동되는 경우가 많기때문에 메인메서드를 안쓰는경우도 많습니다.
하지만 본인은 실제로 보고 테스트를 하는것이기떄문에 사용하는것입니다.
package ch01;
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, java");
}
}
다음은 컴퓨터에서 자료 표현법을 알아보겠습니다
컴퓨터는 반도체메모리로 작업이 되기때문에 0,1 로만 입출력할수있ㄲ다.
bit = 컴퓨터가 표현하는 최소의 수이다. 2진수 하나의 값을 저장가능함.
byte = 8개의 비트가 모인것이다.
한개비트 = 2^1 , 두개의 비트 = 2^2 ,n개의 비트 = 2^n이다.
package ch02;
public class BinaryTest {
public static void main(String[] args) {
int num =10;
int bnum = 0B1010; // B뒤에나오는 수는 이진수 라는 걸 표현
int onum = 012; // 8진수로 표현할땐 앞에 0을 붙힘
int xnum = 0xA; //10진수를 표현할땐 0x를 붙힘.
System.out.println(num);
System.out.println(bnum);
System.out.println(onum);
System.out.println(xnum);
}
}
다음은 변수에 대해 알아보겠습니다
영어로 Variable .
변수의 이용용도(ex. 학생의 성적, 게임 레벨, 회원 주소, 등등 변하는 값..)
표현하려는 수에 맞는 데이터 타입을 써야합니다.
자바에서 변수는 아무떄나 쓸수있지만.. 하지만 가독성을 위해 한번에 작성하는것이좋습니다.
package cho3;
public class VariableTest {
public static void main(String[] args) {
int age , count;
age =10;
int level = 10000;
System.out.println(age);
System.out.println(level);
}
}
다음은 변수를 초기화 하기전 선언한것 초기화하면서 선언한것입니다.
변수이름은 영어(대문자, 소문자),특수문자중 $,_ 만사용
변수선언 시작할땐 숫자는 불가하며.
등등,, 예약어도 불가( while ,if 등등)
가독성이 좋게 만드는것이 좋습니다.
다음은 자료형 데이터 타입에 대해 알아보겠습니다.
다음은 정수 자료형의 종류와 크기입니다.
byte와 short
- byte : 1바이트 단위의 자료형 동영상, 음악 파일, 실행 파일의 자료를 처리할 때 사용
- short: 2바이트 단위의 자료형 C/C++ 언어와 호환 시 사용
int
- 자바에서 사용하는 정수에 대한 기본 자료 형
- 4바이트 단위의 자료형
- 프로그램에서 사용하는 모든 숫자(리터럴)은 int 로 저장됨
- 32 비트를 초과하는 숫자는 long 자료형으로 처리
long
- 8바이트 자료형
- 숫자의 뒤에 알파벳 L 또는 l 을 써서 long 형임을 표시 함
- 예) int num = 12345678900; // 오류
long lnum = 12345678900; //오류
long lnumber = 12345678900L; // ok
package ch04;
public class DoubleTest {
public static void main(String[] args) {
double dnum= 3.14;
float fnum = 3.14f;
System.out.println(dnum);
System.out.println(fnum);
}
}
위 코드는 float 와 double 의 예제입니다. . 만약 float fnum= 3.14;를 쓰면 오류가 뜬다. f를 붙혀야합니다.
부동소수점 방식의 오류로는 지수와 가수로 나타내는 부동 소수점 방식에서는 지수부가 0을 표현할수가없어서 아주~~약간의 오차가 발생할수있다. ...
모든 소수점으로 쓰는 숫자들은 double 형으로 저장되어있기때문에 float형을쓰고싶으면 뒤에F를 써야합니다.
다음으로는
논리형에대해 알아보겠습니다.
자료형없이 변수를 쓸수있습니다. (자바10 이후에는)
boolean은 함수의 반환값타입으로 많이 쓰입니다.
한바이트에 2가지값을 나타냄 Ture, false.
다음은 변하지않은 상수와 리터럴, 변수의 형변환 에대해 알아보겠습니다.
프로그래밍을 하다보면 변하지않은 수가 필요할때가있습니다. 예를 들어 1년 12개월 , 원주율 ,,,
상수를 선언한다 constant..
final 예약어를 사용 (마지막이다... 변하지않는다..)
리터럴(literal)
상수풀(constant pool) = 하드디스크에 프로그램이 있고 그프로그램을 실행을 시키면 로드가되고. 그시점에 프로그램안에있는 자료중 일부는메모리를 잡는다는것입니다. 그것들은 상수 ,static 이라고한다.
프로그램에서 사용하는 숫자, 문자 , 논리값을 뜻한다.
리터럴은 상수 풀에 있다.
형변환
우리가 프로그램을 쓰다보면 모든 자료형이 동일하지는 않기때문에
크기가 다르다던가 등등 그런경우 데이터 타입을 변환하는것이다.
묵시적 형변환 = 아무런 개입을 하지않아도 자동으로 개입하는것
명시적 형변환 = 프로그래머가 강제적으로 타이핑하여 타입을 바꾸는것.
package ch06;
public class TypeConversion {
public static void main(String[] args) {
double dNum = 1.2;
float fNum = 0.9F;
int iNum1 = (int)dNum + (int)fNum;
int iNum2 = (int)(dNum + fNum);
System.out.println(iNum1);
System.out.println(iNum2);
}
}
다음은 자바의 연산자들에대해 알아보겠다.
우선 용어정리는
항(operand): 연산에 사용되는값
연산자(operator): 항을 이용하여 연산하는
다음은 제가 어려워하는 논리 연산자에 대해 알아보겠습니다.
논리연산자는 관계연산자와 혼합하여 많이 사용합니다
&& . 두항이 모두 참인경우. 하나만 참이거나 둘다 거짓이면 거짓으로 반환됩니다.
|| . 두항중 하나 만 참이면 결과는 참입니다. 두항모두 거짓이면 거짓으로반환됩니다.
! . 단항연산자로서 참일땐 거짓으로 바꾸고 거짓일경우 참으로 바뀝니다.
public class LogicalTest {
public static void main(String[] args) {
int num1 = 10;
int num2 = 20;
boolean flag = (num1 > 0) && (num2 > 0);
System.out.println(flag);
flag = (num1 < 0) && (num2 > 0);
System.out.println(flag);
flag = (num1 > 0) || (num2 > 0);
System.out.println(flag);
flag = (num1 < 0) || (num2 > 0);
System.out.println(flag);
flag = !(num1 > 0);
System.out.println(flag);
}
}
조건 연산자
- 삼항 연산자
- 조건식의 결과가 true(참)인 경우와 false(거짓)인 경우에 따라 다른 결과가 수행됨
- if (조건문)을 간단히 표현할 때 사용 할 수 있음
import java.util.Scanner;
public class ConditionTest {
public static void main(String[] args) {
int max;
System.out.println("입력 받은 두 수중 큰 수를 출력하세요\n ");
Scanner scanner = new Scanner(System.in);
System.out.println("입력1:");
int x = scanner.nextInt();
System.out.println("입력2:");
int y = scanner.nextInt();
max = (x > y)? x : y;
System.out.println(max);
}
}
다음은 삼항연산자의 예시코드입니다. (x>y)? x: y:
조건 ? 참: 거짓:
'자바 정리' 카테고리의 다른 글
자바 인강4주차 (0) | 2022.08.28 |
---|---|
자바 인강 3주차(2) (0) | 2022.08.24 |
자바 인강 3주차. (0) | 2022.08.21 |
자바 인강2주차 객체지향 (0) | 2022.08.16 |
자바 2주차. (0) | 2022.08.07 |