본문 바로가기
BACK-END/Java

[Java] Java의 기초 사용

by 로햐 2021. 11. 20.

Ⅰ. 자바란? 

자바 = 소프트웨어 플랫폼

 

플랫폼 : 프로그램이 돌아가는 환경. 컴퓨터 구조, 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