[Java] 자바소개, 변수

킹발·2022년 9월 20일
0

Java

목록 보기
1/12
post-thumbnail

01. introduce

자바 소개

  • TIOBE : 점유율 조사 사이트
  • C언어 + C++ 다음으로 점유율이 높은 자바
  • 한국은 자바민국
  • 자바 뒤를 따르는 파이썬과 자바스크립트
  • 창시자 : 제임스 고슬링

자바의 폭풍 성장을 도운 요인

  • 인터넷과 웹의 발전
  • 플랫폼 호환성 문제 해결
  • 플랫폼 독립적인 언어

컴파일러 역할

  • 개발자가 작성한 소스코드를 CPU가 처리할 수 있도록 번역

프로그램 종속성이란?

각각 OS에서 제공하는 함수가 다르기에 소스코드가 각 OS에 따라 달라진다.
👉 각각의 OS마다 컴파일을 달리해줘야 한다.

자바는 플랫폼 독립성이다. 종속성이 아니다!
👉 OS단 위에 JVM(각 OS에 맞게 개발된) 을 얹어 플랫폼 독립성을 구현 하였다.
👉 우리는 고슬링 아저씨가 만든 JVM 만 OS에 맞게 설치만 한다면 Write Once!! Run Anywhere!!
👉 단점으론 당연히 속도저하

OpenJDK 설치하기

👉 설치방법

설치 확인하기

cmd에 아래 입력
javac
java -version

환경변수

  • 시스템 부팅 시, OS가 환경편수를 쭉 읽어들인 후 메모리에 올려놓기 때문에 언제 어느 위치에서 실행시켜도 실행된다.

자바 실행 원리

자바를 실행하면 일어나는 일


javac 컴파일러가 내가 작성한 .java 소스 코드를 JVM이 알아먹을 수 있는 0101덩어리로 번역하여 .class 파일을 만들어 주었다.

02. 변수

변수

변수 선언

  • 해당 타입 만큼 메모리에 공간을 잡아라

  • 메모리 할당 명령

  • 선언과 초기화는 동시에 이루어질 수 있다

    변수 선언 후의 메모리

    int num;
    num = 256;
  • 메모리를 할당하라는 명령이기에

  • 메모리엔 주소가 있다.

  • 메모리를 관리하는 주체는 OS 이다.

    변수명 규칙

    int appleNum = 10;
  1. 대소문자는 구분되며 길이 제한은 없다.

  2. 자바 예약어는 사용할 수 없다. (ex. class, boolean, try, catch ···)

  3. camelCase가 관례로 사용된다.

  4. 특수문자는 _ $ 만 사용 가능하고 첫번째 글자에 숫자는 올 수 없다.

    변수 사용과 메모리 할당 예제

    int num1; //변수 선언
    num1 = 10; //변수 초기화
    
    int num2 = 10; //변수 선언과 초기화를 동시에
    int num3 = num1 + num2; //변수를 사용한 연산
    System.out.println(num1 + " + " + num2 + " = " + num3); //결과 출력

데이터 타입

  • 1byte = 8bit
  • 오버플로우 발생할 가능성 항상 인지할 것
기본 타입메모리 크기저장 범위
byte1 btye-128~127
char1 btye0~65535
short2 btye-32768 ~ 32767
int4 btye-21억 ~ 21억
long8 btye
float4 btye
double8 btye
boolean1 btyetrue, false

데이터 타입을 나눈 이유

  • 컴퓨터는 2진수밖에 이해를 할 수 없다
    • 음의 정수는 컴퓨터에게 어떻게 알려주어야 할까?
      👉 2의 보수법을 사용
    • 실수는 컴퓨터에게 어떻게 알려주어야 할까?
      👉 부동 소수점, 표준 IEEE 754 방법을 사용

실수계산에서 오차가 발생하는 이유

double num = 0.1;

for(int i = 0; i < 1000; i++) {
	num += 0.1;
}
		
System.out.println(num);

// 결과
// 100.09999999999859
  • 십진법에서도 1/3을 정확하게 표현할 수 없다.
    👉 이진법에서도 정확하게 표현할 수 없는 수가 있을 것이다.
  • 메모리는 유한, 실수는 무한
    👉 무한을 유한에 담기위해서 미리 일정 구간으로 사용할 값을 정하고 연산된 값에서 가장 오차가 적은 근사값으로 저장된다.

문자코드

char ch1 = '헐';
char ch2 = '확';
char ch3 = 54736; // 문자 '헐'의 유니코드 값
char ch4 = 54869; // 문자 '확'의 유니코드 값
char ch5 = 0xD5D0;
char ch6 = 0xD655;
		
System.out.println(ch2 + " " + ch2);
System.out.println(ch3 + " " + ch4);
System.out.println(ch5 + " " + ch6);
  • 문자와 숫자가 일대일 매칭
  • UTF-8 통일됨

boolean

int num1 = 10;
int num2 = 20;
		
System.out.println(num1 < num2);
  • 결과값으론 true가 반환
  • CPU는 연산이 끝나면 8개의 자료형 中 하나로 값을 반환

0개의 댓글