JVM


Java Virtual Machine

컴파일된 Class파일을 실행하는 역할


JAVA를 독립적인 프로그래밍언어로 만들어준다.


자바 실행원리

1. 소스 작성(Code)

- .java파일로 저장

2. 컴퓨터 언어로 변환(Compile)

- .class파일 생성

3. 실행(Run)


JVM은 OS에 종속적이다.

윈도우용,리눅스용 다르다.


핸드폰 충전 어뎁터로 생각하면 된다.

충전선은 usb형식으로 어뎁터만 전기코드에 맞게 꽂아주면 충전선을 바꿀 필요가 없다.


JRE

Java Runtime Environment

자바프로그램이 실행될수있는 환경

JVM이 포함되어 있다.


Java Virtual Machine

- 플랫폼에서 최종적으로 실행시켜준다.

Bytecode Verifier

- 로딩된 Class파일 정보가 플랫폼에서 실행되는데 문제가 없는지 검증한다.

Class Loader

- 컴파일된 Class파일을 메모리에 로딩시켜준다.

세가지로 구성됨.


JDK

Java Development Kit

JRE가 포함되어있고 개발시 필요한 디버깅기능,간단한 DB,샘플예제 등

어플리케이션에 필요한 기능을 제공한다.





코드로 보는 버블정렬(BubbleSort)

간단히 말해 배열에서 배열[i]와 배열[i+1]의 값을 확인 후 
배열[i]가  배열[i+1] 보다 크다면 둘의 위치를 바꾼다
둘의 위치를 바꾸기위해 임시저장소(아래코드:int temp) 사용한다.
위에서 말한 행위를 배열의 크기(for문 i) 안에
배열의 크기-1-i(for문 j)만큼 반복하여 위치를 정렬하는것을 버블정렬이라고 한다.

위 로직이 실행되게되면 10자리의 배열에 0~9까지 값이 랜덤으로 생성된다.

생성된 숫자 : 1338675973


위 로직을 일부 해석해보겠다.


빨간색으로 표시된 부분이 비교하는 부분이다.

배열[0]의 값 1과 3을 비교한다.

1338675973


배열[1]의 값 3과 3을 비교한다.

1338675973


배열[2]의 값 3과 8을 비교한다.

1338675973


배열[3]의 값 8과 6을 비교한다.

1338675973

배열[3]의 데이터가 배열[4]의 데이터보다 크다

배열[3] : 8과 배열[4] : 6 위치를 변경 -> 13368(위치변경)75973



배열[4]의 값 8과 7을 비교한다.

1336875973

배열[4]의 데이터가 배열[5]의 데이터보다 크다

배열[4] : 8와 배열[5] : 7 위치를 변경 -> 133678(위치변경)5973


배열[5]의 값 8과 5을 비교한다.

1336785973

배열[5] 데이터가 배열[6]의 데이터보다 크다

배열[5] 데이터 : 8와 배열[6] 데이터 : 5 위치를 변경 -> 1336758(위치변경)973


배열[6]의 값 8과 9를 비교한다.

1336758973


배열[7]의 값 9과 7를 비교한다.

1336758973

배열[7] 데이터가 배열[8]의 데이터보다 크다

배열[7] 데이터 : 9과 배열[8] 데이터 : 7 위치를 변경 -> 133675879(위치변경)3



배열[8]의 값 9과 3를 비교한다.

1336758793

배열[8] 데이터가 배열[9]의 데이터보다 크다

배열[8] 데이터 : 9와 배열[9] 데이터 : 3 위치를 변경 -> 1336758739(위치변경)


이런식으로 반복되면 맨 뒷자리는 가장 큰수가 남게된다.


맨 뒷자리 값을 가장 큰수이므로 비교 하지않고 하나씩 작은 숫자로 반복하게된다.

또 check값으로 데이터의 변경이 없을 경우 즉 정렬 완료시 반복을 중지한다.



자바 초보들이 알아야 할 기본 개념!


특수문자 사용 및 치환


특수문자 사용하기(Split,replace등등)

문자열을 배열로 만들때 사용하는 Split을 사용거나

문자열중 특정문자를 변경할때 사용하는 replaceAll등을 사용한다.

예를들어 ^으로 Split해보면 적용이 안되는 것을 알 수 있다.

String a = "sss^sss";

String[] b = a.split("^");

for (String c : b) {

System.out.println(c);

}


출력결과 :  sss^sss


모든 특수문자가 그런건 아니다.

확인해본 특수문자는 아래와 같다.


특수문자 : $, ^,*, (, ), +, |, [, {, ., ?

사용방법 : ex)\\^


String a = "sss^sss";

String[] b = a.split("\\^"); 

for (String c : b) {

System.out.println(c);

}

출력결과: 

sss

sss


\\를 사용하면 ^을 기준으로 split된것을 확인할 수 있다.


위 특수 문자사용와 다른 특수문자도 있다.


특수문자 : "(큰 따옴표)

사용방법 : \"


String a = "sss"sss";

String[] b = a.split("\"");

for (String c : b) {

System.out.println(c);

}

특수문자 : \(백슬래쉬)

사용방법 : \\\\


String a = "sss\\sss";

String[] b = a.split("\\\\");

for (String c : b) {

System.out.println(c);

}



특수문자 입력하기

개발을 하다보면 문자열을 입력할때 특수문자를 사용할일이 생긴다.


큰 따옴표를 문자열(String)안에 넣어야할경우가 생기게될때 

사용하는 방법이다.


예를들어 문자열큰 따옴표를 넣을일이 생긴다면

String val = """; 이렇게 입력한다면 당연히 오류가 난다.

큰따옴표를 입력하는 방법은 아래와 같다.

String val "\""; 


 

\t

\n 줄 바꿈

\' 작은 따옴표(char에서 사용)

\" 큰 따옴표

\\ 역슬래쉬


System.out.println("Te\tst");

출력결과 : Te st(탭적용)

System.out.println("Te\nst");

출력결과 : Te

st(줄 바꿈 적용)

char b = '\'';

System.out.println(b); 

char문자열은 작은따옴표로 입력하기때문에 사용

출력결과: '(작은따옴표 출력)

System.out.println("Te\"st");

출력결과: Te"st(큰따옴표 출력)






자바 초보들이 알아야 할 기본 개념!


주석

자바파일(*.java)을 컴파일(*.Class 생성)을할때 컴파일하지않는다.


주석은 언제 사용할까?

코멘트용도

-프로그래밍한것을 기록해놓는다.

-동료들과의 협업에 용이하다.

디버깅용도

-어떠한 기능을 잠시 사용안할때 주석처리 해놓는다.


한줄 주석방법

// <-이러한형식 //를 사용하면 한줄 주석이 된다. 

보통 System.out.println("")이나 log를 주석 처리할때 사용한다.

이클립스 단축키

- Ctrl + / : 여러줄이 한꺼번에 주석처리됨. 주석 해제하려면 반대로 하면 된다.


여러줄 주석방법

/*

여러줄 주석은 /*으로 시작하고 */으로 마무리한다.

보통 코멘트를 달거나 긴 개발로직을 주석처리할때 사용한다.

*/

이클립스 단축키

- Ctrl + Shift + / : 블록 주석(/* */)

- Ctrl + Shift + \ : 블록 주석 제거


또 Class위나 Method위에 /**를 입력하고 enter를 입력하면 템플릿이 자동으로 

완성되는 것을 확인할 수 있다. 

ex)

/** 

 * 

 * @author choi 

 * 

 */ 

public class Test{


}


자바 초보들이 알아야 할 기본 개념!


클래스란?
유사한 특징을 지닌 객체들의 속성을 묶어 놓은 집합체라 할 수 있다.
Object란?
클래스를 사용할 수 있게 실체화한 것이다.
Method란?
클래스 안에 특정 기능을 구현한 것이다.

이제 3가지에 대해 알아보도록 하자.

예를 들어 두 명의 사람이 있는데
이름과 나이가 철수 28살, 미자 20살이라고 한다.
사람이라는 명칭이 클래스이고 
사람들의 정보가 객체라고 생각하면 된다.

클래스에서 생성 가능한 것은 변수와 기능이 있다.

클래스 생성 방법은?


위에 코드를 보면 Person이라는 클래스가 선언되어 있는 걸 볼 수 있는데
Person 클래스 안에는 name, age란 정보(변수)와 자기소개하는 기능(Methods) speak가 있는 걸 볼 수 있다.

이제 위에 클래스를 사용하여 객체(Ojbect)를 선언하는 법을 알아보자.
object 란? 클래스를 실체화하는 것으로 new로 생성한다.



위 코드를 분석해보면,
위 코드에서 객체(Object) 선언하는 부분은 아래 두 코드이다.



Person 이란 Class를 person이라는 객체로 생성한 것인데 생성할 땐 = new 클래스명 형식으로 선언한다.



이 부분은 person이라는 객체에 이름과 나이를 저장해주는 부분이다.
즉 맨 위쪽에서 클래스와 객체를 설명한 대로 Person(사람)이라는 클래스가 있고
그 클래스를 사용하여 객체를 생성하여 이름과 나이를 넣어주면 28살 철수가 만들어진 것이다.



이 부분은 Person Class 안에  speak 메소드를 불러내 사용하는 것이다.
사용하게 되면 콘솔에 "이름과 나이는 : 철수, 28"가 찍히는 것을 확인할 수 있다.


배열이란?


일정한 형태의 모음을 만드는 것이다.

ex)int[] numbers = new int[12];


배 12개 들어가는 박스를 포장한다면?

배[박스] 배박스 = new 배[12]

배가 12개 들어갈 수 있는 박스를 만드는 것으로 생각하면 된다.

[12]

위 형태로 생각하면된다.


다중배열 2차

ex)int[][] numbers = new int[3][12];

배[줄][박스] 배박스 = new 배[3][12]

배 12개 들어있는박스만들고 그 박스를 3줄로 쌓는것이다.

[12]

[12]

[12]

위 형태로 생각하면된다.


다중배열 3차

ex)int[][][] numbers = new int[4][3][12];

배[라인][줄][박스] 배박스 = new 배[4][3][12]

배 12개 들어있는박스만들고 그 박스를 3줄로 쌓아 4라인을 만든다.

| [12] | [12] | [12] | [12] |

| [12] | [12] | [12] | [12] |

| [12] | [12] | [12] | [12] |

위 형태로 생각하면된다.


다중반복문 사용방법은 아래 코드에 표현되어 있다.




배열이란?


배열은 같은 형태의 모음 이라고 생각할 수있다.


ex)int[] numbers = new int[3]; 


즉, 위에 numbers는 int가 3개 들어갈수 있는 것이다.

배열의 시작 숫자 0부터 시작한다.

위처럼 배열 선언한다면 주소값은 0,1,2 세개가 생기게된다.

int[] numbers = new int{1,2,3}; 

형식으로 선언할 수도 있다.


쉽게 말하면 일정한 형태의 모음을 만드는 것으로 보면된다.

ex)

배 12개 들어가는 박스를 포장한다면?

배[박스] 배박스 = new 배[12]

배가 12개 들어갈 수 있는 박스를 만드는 것이다.


반복문인 for문으로 배열의 내용을 확인할 수 있다.


배열 선언 예



자바 초보들이 알아야 할 기본 개념!

반복문(while)
반복문이란? 어떠한 일을 반복해서 해주는 것이다.


while 문은
while(조건) {
실행할 로직
}
형식으로 생각하면 된다.


dowhile 문은
do {
실행할 로직
}while(조건)
형식으로 생각하면 된다.

while, doWhile 문의 차이는?
조건을 먼저 보고 할지 or 먼저 하고 조건을 볼지 차이가 있다.

while 문은 선평가 후 실행이고
dowhile 문은 선실행 후 평가이다.

아래의 코드를 보면 
while 문은 조건부터 확인하기에 아예 작동을 하지 않는다.
dowhile 문은 실행 후 조건을 확인하기에 숫자가 1이 증가함을 알 수 있다.



자바 초보들이 알아야 할 기본 개념!

반복문(for)
반복문이란? 어떠한 일을 반복해서 해주는 것이다.

미지수를 정한 후 정해진 수가 어디부터 어디까지 될 때까지란 조건으로 사용한다.
ex) 시작할 수를 0으로 정한 후 1씩 증가시키고 10일 때 종료한다.
for 문은 
for(조건) {
실행할 로직
}
의 형식으로 작성하면 된다.

조건에 들어가는 형식은
int x =  0; x < 10; x++ 형식으로 작성할 수 있다.
int x =  0;은 시작할 수를 설정하는 것이고 또
 x < 10;는 종료되는 조건을 설정하는 것고 또
x++은 x를 1씩 증가시킨다는 조건을 말한다.

반복문 for 문의 사용방법은 아래 코드로 표현하였다.
1. 변수를 증가시키며 반복하기.
2. 변수를 감소시키며 반복하기.
3. 반복문 작동 중 특정 숫자에 종료하기.



String 개념

String문자는 ""를 사용해 만들어진다.



위처럼 text란 String을 만들게되면 문자란 값을 상수저장소(Constant pool)에 저장한다.


동일한 "문자" 라는 문자열을 생성할경우


위에 말했듯이 String text를 생성할때 상수저장소에 저장하게되는데

text2가 만들어질때 상수저장소를 확인하고 "문자"가 있을경우 그 참조한 값을 반환한다.

text,text2 참조값은 같다.

그러므로 text와 text2는 같다.


상수저장소란?

- String객체를 저장하는 메모리 구역이다.


즉, 문자열이 이미 존재하면 새로운 객체를 생성하지않고

기존객체를 사용하여 효율적이게된다.


위처럼 new String으로 문자열 생성시 상수저장소에 저장하지않고

일반 힙 메모리에 String객체를 생성한다.

text와 text2의 참조값이 다르다.

text==text2는 될수 없다.


String 비교방법

1.equals() 메소드

2.단순 == 비교

3.compareTo() 메소드


equals() 메소드

equals와 equalsIgnoreCase 있다.


equals이란?

문자열의 내용을 비교하는 것이다.



equalsIgnoreCase이란?

문자열의 특징을 무시하고 비교하는 것(쉽게말해 소문자,대문자)이다.



단순 == 비교

위에 String 개념에서 설명한다.


compareTo() 메소드

문자열 길이를 비교해 정수를 반환해준다.

같다면 0

크다면 1

작다면 -1





+ Recent posts