Ⅰ. 자바란?
자바 = 소프트웨어 플랫폼
플랫폼 : 프로그램이 돌아가는 환경. 컴퓨터 구조, OS, GUI등 다양하다.
운영체제 : 컴퓨터와 사용자 사이를 연결해주는 인터페이스. 일종의 플랫폼으로 볼 수 있다.
인터페이스 : 서로 다른 시스템 사이의 경계에서 상호작용을 할 수 있도록 하는 장치. 여기서의 시스템은 컴퓨터 시스템들 외에도 사용자 등도 포함한다.
1-1. 특징
분류 : 객체지향 언어이자 컴파일러 언어.
자바의 모든 객체는 클래스로 이루어져있어 모든 내용이 무조건 클래스 안에 들어있어야한다.
자바는 어떤 운영체제에도 종속적이지 않다. JVM이 환경마다 맞춰 컴파일해주기 때문.
- JVM : Java Visual Machine : 자바 가상 머신으로 자바가 어떠한 운영체제에서도 돌아갈 수 있도록 도와준다.
네이버 개발 블로그에 JVM에 관한 좋은 글이 있어 링크한다. 이외의 글들도 읽어보면 재밌음!
https://d2.naver.com/helloworld/1230
가비지 컬렉터 : 메모리를 돌아다니면서 더이상 사용하지 않는 찌꺼기들을 수거하여 메모리의 성능을 회복
JDK : Java Development Kit : 자바 개발 툴.
1-2. 구성
프로젝트 : 개발자가 만드는 프로그램의 단위.
패키지 : 프로젝트 안에 포함되는 객체들을 분류하여 나눈것.
클래스 : 자바에서 객체들을 표현하는 방법.
변수 :
리터럴 : 변수
ⅲ. 메모리 영역
Java의 메모리는 STATIC, HEAP, STACK의 세 부분으로 이루어져있다.
영역 | 설명 | 올라가는 것 |
static | 프로그램 시작 시 할당, 종료 시 소멸. 정적 | 필드, 전역변수 |
heap | 변수를 할당하고 초기화하는 구역. 동적. | new 연산자. 객체 할당. |
stack | 메소드 호출시 생성 | 지역변수, 매개변수, 메소드 호출 스택 |
2. 자료형
자료형이란? 변수의 종류를 의미한다.
자바에서 기본 제공하는 자료형은 8개의 기본자료형, 1개의 참조자료형이 있다.
자료형 | 크기 | 기본값 | |
boolean | 1byte | FALSE | |
char | 2byte | '\u0000' | |
String | 참조형 | 굳이 따지면 4byte임...? | |
byte | 1byte | 0 | |
short | 2byte | 0 | |
int | 4byte | 0 | |
long | 8byte | 0L | |
float | 4byte | 0.0f | |
double | 8byte | 0.0, 0.0d |
이외에도 개발자가 자료형을
선언 : 메모리의 heap 영역에 새로운 것을 생성.
할당 : 변수에 값을 대입.
초기화 : 비어있던 변수에 값을 처음 할당하는 것.
//선언
//자료형 변수명;
char ch;
//할당
//변수명 = 리터럴;
ch='A';
오버플로우 : 자료형의 크기를 넘어가는 경우 넘친다.
예) byte
1 byte는 8 bit : 8칸 중 가장 처음 칸은 부호를 결정. 따라서 -2^7~2^7-1인 -128~127까지의 정수를 표현할 수 있다.
2-1. 형변환
- 자동형변환
- 크기가 작은 자료형에서 큰 자료형으로 갈 때는 아무런 문제 없이 들어간다. 이 경우 형변환한다고 명시하지 않아도 자동으로 Java 상에서 형변환을 해준다. (예 : short 2byte, int 4byte. short에서 int로의 형변환은 아무런 문제가 없다.)
- 강제형변환
- 하지만 크기가 큰 자료형에서 작은 자료형으로 갈 때는 작은 자료형에 맞춰 크기가 잘려나가므로, 값이 변형될 수 있다. 자동으로 형변환을 해주지 않으므로 변경할 자료형을 명시해준다.
//자동형변환
short sNum = 132;
int iNum=sNum;//132의 값이 잘 들어가있다
//강제형변환
int iNum2=10;
short sNum1=(short)iNum2;
3. 기초 입출력
3-1. 출력
출력은 System.out.print 계열의 메소드를 사용한다.
//기본 출력. 다음 출력과 동일한 라인에 존재
System.out.print("Hello World!");
//출력을 끝내고 개행
System.out.println("Hello World");
//형식에 맞춰 출력
int count=0;
System.out.printf("%d 번째 출력입니다.",count);
System.out.printf("%d %-2.1f",3,4.2);
printf의 형식 지정.
printf는 인자 수마다 ','를 이용.
지시자 | 의미 | 비고 |
%d | 10진수 정수 | |
%o | 8 진수 | |
%x | 16진수 | |
%c | 문자 | C : 대문자 |
%s | 문자열 | S : 대문자 |
%f | 실수 소수점 아래 6 자리 | |
%e | 지수형태표현 | |
%g | 대입 값 그대로 | |
%A | 16진수 실수 | |
%b | 논리형 |
d,f 앞에 붙은 수의 의미
분류 | 의미 | 예 | 공백은 _로 표현해보자 |
정수 | 정수만큼 전체 자리 수를 확보 | printf("%5d",123) | __123 |
음수 | 왼쪽 정렬 | printf("%-5d",123) | 123__ |
0 | 빈 자리를 0으로 채우기 | printf("%05d",123) | 00123 |
소숫점 | 소수점의 자리 수 | printf("%5.2f",123.456) | 123.46 |
3-2. 입력
Scanner 새 객체를 heap에 생성하고 입력받는다.
Scanner sc = new Scanner(System.in);
int iNum = sc.nextInt();
double dNum = sc.nextDouble();
char ch = sc.next/*Line*/().charAt(0);
String str = sc.next/*Line*/();
//--
4. 연산자
4-1. 연산자란?
연산을 지시하기위한 기호.
4-2. 연산 순서
연산자 분류 | 종류 | 우선 후순위 |
직접접근 | (),[],/.-> | |
단항 | ++,--,부호,~,!,형변환 | |
연결연산 | + | (String의 경우 단항 다음으로 연산) |
이항:산술 | *,/,% | +,- |
이항:시프트 | <<,>>,>>>(언사인드) | |
이항:비교 | >=,<=,>,<, instanceof, | ==,!= |
이항:논리 | &, ^, | | &&, || |
삼항 | ? : | |
대입 | =, +=,-=,*=,/=,%=, &=, |=, <<=, >>=, >>>= |
->: 람다.
<< : 시프트. 값을 2진수로 바꿔 <<으로 움직이고 빈 자리는 0으로 채운다.
>> : 시프트. 값을 2진수로 바꿔 >>으로 움직이고 음수의 경우 빈자리를 1로 채우고, 양수의 경우 0으로 채운다.
>>> : 언사인드. 값을 2진수로 바꿔 >>방향으로 움직이고 빈자리는 0으로 채운다.(무조건 양수가 된다.)
byte, short, char는 int형으로 반환.
instanceof : 객체가 이 자료형인지 아닌지 boolean 형으로 반환(true/false)
5. 제어문
5-1. 조건문
조건식이 true일 때, false일 때 수행하는 코드를 나눠주는 구문
if(a>0){
System.out.println(a+"는 양수입니다.");
}else if(a<0){
System.out.println(a+"는 음수입니다.");
}else{
System.out.println(a+"는 0입니다.");
}
switch문 : 입력받은 값이 어떤 값인지에 따라 수행하는 코드가 다르다. break를 만나지 않으면 아래 남은 코드를 순차적으로 수행한다. 값이 정확히 일치해야하므로 주의할 것. 자료형은 사용자가 지정한 타입과 동일하다.
switch(num){
case 1:System.out.println(num+"는 1입니다.");
break;
case 2:System.out.println(num+"는 2입니다.");
break;
case 3:System.out.println(num+"는 3입니다.");
break;
case 4:System.out.println(num+"는 4입니다.");
break;
default:System.out.println("다시 입력해주세요");
}
5-2-1. 반복문
for : for(초기식, 조건식, 증감식){}으로 이루어져있으며 조건식이 false일때까지 수행한다.
for(int i=0;i<10;i++){
System.out.println(i);
}
for(;;){
system.out.println("무한반복문입니다.")
}
while : 조건식만 사용하고, 조건식이 false일때까지 수행한다.
while(i>0){
System.out.println(i+"는 0보다 큽니다.")
i-=10;
}
while(true){
System.out.println("무한반복문입니다");
}
do while : while과 작동 방식은 같지만, 조건식이 처음부터 false여도 무조건 한번은 실행된다.
do{
System.out.println("무조건 한번은 실행합니다.");
i-=10;
}while(i>0)
5-2-2. 분기문
반복문 안에서 탈출하거나, 이후 코드를 수행하지 않고 반복문의 조건식으로 돌아가 반복문을 다시 실행하는것.
switch의 break;는 switch문 하나만을 빠져나가고 종료되므로 반복문을 빠져나갈 수 없으니 주의할 것!
for(;;){
System.out.println("무한 반복문 안입니다.");
iNum1=iNum2*iNum3;
if(iNum1>100){
break;
}
}
6. 배열
6-1. 배열이란?
연속된 공간을 만들어 같은 자료형을 넣어주는 것
1차원 2차원 ... n차원까지 모두 가능하다.
//선언, 초기화. int는 다른 자료형으로 대체 가능.
int[] arr1 = new int[10];
//할당
arr1 = {10,11,12};
//초기화와 할당
int[] arr2={10,11,12};
//다차원 배열
int[][] arr3 = new int[2][3];
arr3 = {{10,11,12},{20,21,22}};
6-2. 배열 복사
얕은 복사 : 배열의 주소값만 복사. 원 배열이 수정되면 복사한 배열도 수정된 값을 가진다.
깊은 복사 : 새로운 배열을 생성하여 내용물들을 복사. 원 배열을 수정하더라도 복사한 배열은 기존 값을 유지한다.
'BACK-END > Java' 카테고리의 다른 글
[JAVA] API-JDBC (1) | 2021.12.07 |
---|---|
[Java] API-Stream(Input & Output) (0) | 2021.11.25 |
[Java] API-Collection과 Map (0) | 2021.11.23 |
[Java] API 기초와 java.lang (1) | 2021.11.22 |
[Java] 객체지향의 활용 (0) | 2021.11.21 |