해당 포스팅을 읽고 많은 분들의 도움이 되면,
좋겠다는 취지에서 작성하게 되었습니다.
자바의 기본 개념에 대해서 설명합니다.
Java Virtual Machine의 줄임말이며, '자바를 실행하기 위한 가상 기계(컴퓨터)'입니다.
Java 는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되기 위해선 OS 위에서 Java 를 실행시킬 무언가가 필요하다. 그게 바로 JVM이다.
즉, OS에 종속받지 않고 CPU 가 Java를 인식, 실행할 수 있게 하는 가상 컴퓨터
입니다.
(== 이진코드)
컴퓨터가 인식할 수 있는 0과 1로 구성된 이진코드
즉, CPU가 이해하는 언어는 바이너리 코드, 가상 머신이 이해하는 코드는 바이트 코드입니다.
쓰레드란 프로세스 내에서 실제로 작업을 수행하는 주체를 의미합니다.
모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행하게 됩니다.
또하느 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스라고 합니다.
int
: 메모리에서 4byte 공간 차지
8bit
= 1 byte
참고)
int i =10;
10진수 : 10
2진수 : 1010
=> 위와같이 초기화 해줘도 컴퓨터는 2진수밖에 모르기 때문에 1010 으로 메모리에 대입됩니다.
(Tip, 계산기를 누르고 프로그래머 계산기를 이용하면 2진수를 쉽게 알 수 있음)
기본자료형은 데이터가 변수에 직접 저장되고,
(기본자료형은 정수가 들어갈 때, 실수가 들어갈 때 등 다 메모리 크기가 다름)
객체 자료형은 객체 메모리 주소가 변수에 저장된다.
(항상 주소만 들어가기 때문에 4바이트의 크기만 가질 수 있습니다)
(C계열에서 포인터라고 하고, JAVA에서는 레퍼런스라고 합니다)
byte - 1byte
char - 2byte (' '사용)
short - 2byte
int - 4byte
long - 8byte
float - 4byte
double - 8byte
boolean - 1byte (true || false)
문자열을 다룸
byte by =10;
int in = by;
sout
// 1
int ivar = 100;
byte bvar = (byte)ivar;
sout
// 2
ivar = 123456;
bvar = (byte)ivar;
sout
참고, 명시적 형 변환은 데이터가 누실될 수 있습니다.
\t
: 탭
\n
: 줄 바꿈
\'
: 작은 따옴표
\"
: 큰 따옴표
\\
: 역슬래쉬
printf()메서드 이용 (f는 format(형식)을 뜻함)
%d
: 10진수
%o
: 8진수
%x
: 16진수
%c
: 문자
%s
: 문자열
%f
: 실수
//서식문자
int num = 1;
System.out.printf("%dㅇ", 10);
System.out.printf("%d",num);
System.out.printf("INFO: %d반 %d번",5,2);
//문자
System.out.printf("%c","A");
//문자열
System.out.printf("%s","Java");
//실수
float f =1.23f;
System.out.printf("%f",f);
double d = 1.231231d;
System.out.printf("%f",d);
// 서식문자 정렬
System.out.printf("%5d",1234); // 좌측정렬
// 5칸을 만들어 놓고 우측정렬함
System.out.printf("%5d",1234);
// 서식문자 소수점제한
System.out.printf("%.2f\n",1.23); //1.23 출력
System.out.printf("%.3f\n",1.23); //1.230 출력 (좌측정렬)
피연산자 개수에 따라서 단항, 이항 그리고 삼항 연산자로 구분할 수 있습니다.
=
: 프로그램에선, 오른쪽 값을 왼쪽에 대입한다.
/
: 나눗셈
%
: 나머지
+=
: 더하고 대입
-=
: 빼고 대입
*=
: 곱하고 대입
/=
: 나누고 대입
%=
: 나머지를 대입
두개의 피연산자를 비교해서 참/거짓의 결론을 도출함
>
: a>b : a가 b보다 크면 참
<
: a<b : a가 b보다 작으면 참
>=
: a>=b : a가 b보다 크거나 같으면 참
<=
: a<=b : a가 b보다 작거나 같으면 참
==
: a==b : a와 b가 같으면 참
!=
: a!=b : a와 b가 같지 않으면 참
++
: 1만큼 증가
--
: 1만큼 감소
&& 논리곱(AND)
: a && b : a와 b가 모두 참이면 참
|| 논리합(OR)
: a || b : a와 b중 하나라도 참이면 참
! 논리부정(NOT)
: ! a:a의 상태를 부정
삼항 연산자로 두 개의 피연산자 연산 결과에 따라서 나머지 피연산자가 결정된다.
조건식 ? 식1 : 식2
: 조건식이 참이면 식1이 실행되고, 조건식이 거짓이면 식2가 실행된다.
사실상, 자바에서는 메모리에 접근할 일이 거의 없기 때문에 잘 사용하진 않습니다.
(주로 c,c++)
그러나, 한번 숙지해두면 좋기 때문에 추가하였습니다.
& : AND 연산
= > a & b : a와 b가 모두 1이면 1
| : OR 연산
= > a | b : a와 b중 하나라도 1이면 1
^ ㅣ XOR 연산
= > a^b : a와 b가 같지 않으면 1
// 비트 연산자
x = 2;
y = 3;
sout("x & y " + (x&y));
sout("x | y" + (x|y));
sout("x^y" + (x^y));
//출력
x & y : 2
x | y : 3
x ^ y : 1
인덱스를 이용해서 자료형이 같은 데이터를 관리하는 것입니다.
(배열의 깅리 = n, 인덱스 0 ~ n-1 까지)
예) 아파트 호수 관리, 회사 사번 관리, 학급 학생 관리 등 ...
//배열 선언 후 초기화
int []arr = new int [배열 개수 입력];
//인덱스 값 입력 방법 2가지
// 1
arr[0] = 100; ... 이런식으로 각각 입력 하거나,
// 2
arr[5] = {1,2,3,4,5}; 이런식으로 직접입력 가능
참고, Array 에러는 보통 인덱스 범위를 초과해서 나오는 에러입니다. (아닌 경우는 구글링)
기본 자료형 데이터를 담고 있는 변수와 달리 배열 변수는 배열 데이터의 주소를 담고 있습니다.
// 1 //2
int i=10; int [] i =new int[3];
// 변수 i 초기화 // 배열 i[] 주소
배열 길이
배열명.length
배열 요소 출력
Arrays.toString(배열명)
배열 요소 복사
ex)
arrAtt3 = Arrays.copyOf(arrAtt1,arrAtt1.length);
sout(Arrays.toString(arrAtt3));
참고, 배열의 주소를 copy 한 것이 아니라 요소를 복사한 것임.
즉, 내용은 같아도 주소는 다름
배열 레퍼런스
arrAtt2 = arr Att1;
// 새로운 객체를 만드는 것이 아니라 배열1번을 배열 2번에 대입함.
즉, 같은 레퍼런스를 가리키고 있다고 생각하면 됌.
int [][] arrMul = new int [3][2];
// 3행 2열
조건의 결과에 따라 양자 택을 또는 다자 택일을 진행합니다.
양자택일 : 주로 if 문
문법) if(조건식)
|| if(조건식) else
다자택일 : 주로 switch 문
비교대상이 되는 결과값과 선택사항이 많을 경우 사용됩니다.
//예
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int score = Integer.parseInt(br.readLine());
switch(score){
case 100:
case 90:
sout("수");
break;
case 80:
sout("우");
break;
default:
sout("재수강");
break;
}
프로그램 진행을 특정 조건에 따라 반복적으로 진행하는 것입니다.
for,while문 : 조건이 참일 때까지 반복 수행합니다.
while(true || false)
while문과 비슷하며, 차이점은 조건 결과에 상관없이 무조건 최소한번은 {..}의 프로그램을 수행한다는 것입니다.