본문 바로가기

IT/공부

[프로그래밍] 연산자, 주석문, switch, for, while, 배열

자바는 C나 C++을 아는 경우에 배우기 쉽다.

자바 플랫폼은 자바 API와 JVM으로 구성되어있다.

자바 API는 Application Programing Interface로 자바 어플을 프로그래밍할 때 필요한 인터페이스이다.

자바 플랫폼 마이크로에디션은 모바일용이었으나 현재는 안드로이드에 밀려 쓰지 않는다.



식별자는 Identifier, 예약어는 keyword라고 한다.

아이덴티파이어는 각각을 구별할 수 있도록 하는 것이다.

아이덴티파이어를 정의할 때에는 공백이나 특수문자가 포함되지 않도록 하며, 첫글자로 특수문자나 숫자를 사용하면 안 된다.

또한 아이덴티파이어에 키워드를 사용할 수 없다.

키워드는 자바 자체에서 사용하겠다고 예약한 언어이다. class, long, false, 등이 키워드이다.



자료형은 Data type, 기본 자료형은 Primitive Data Type이라고 한다.

문자 리터럴은 C의 잔재로, 잘 쓰지 않는다.

문자를 출력할 때 문자열은 ""로 묶는다.(""도 keyword임을 알 수 있다) 만일 출력 내용에 double quotation을 포함하고 싶으면 "\""를,한 줄 처리를 할 때에는 "\n"을, 탭을 삽입하고 싶으면 "\t"를 사용한다.


연산자에는 시프트 연산자와 비트 연산자가 있는데, 이는 2진수를 다루는 연산자로 C의 잔재이다.

언어는 HLL과 LLL로 나뉘는데, HLL은 High Level Language로 인간에게 가까운 언어이고, LLL은 Low Level Language로 기계어에 가까운 언어이다.

인간은 10진수를, 기계는 2진수를 사용하는데, 자바는 HLL로 2진수를 잘 다루지 않는다. (C는 2진수를 다루니 LLL임을 알 수 있다)


논리연산자에는 & and연산자와 | or연산자가 있다.

&와 &&는 실행 결과는 같지만 작동이 다르다.

&는 연산 중 결과가 예측 가능하더라도 끝까지 연산하고, &&는 결과 예측이 가능하면 뒤 과정은 생략한다.

예를 들어, 

int x = 1;

int y = 2;

if(x==2 & y==2){

System.out.println("x는 2이고 y=2입니다");

}

라고 할 때, if의 조건문이 x==2가 false기 때문에 연산 결과도 false지만, &는 x==2를 처리하고 y==2까지 처리한다.

만일 if의 조건문에 &&가 쓰였다면, x==2가 false임라 연산 결과가 false임을 예측하면 뒤 처리는 하지 않는다.

|과 ||도 마찬가지의 차이를 갖는다.


삼항연산자는 현업에서 꽤 자주 이용한다.

boolean boo = (1<=2)? true:false;

로 사용하며, 괄호 안의 조건이 참이면 콜론 앞의 값이, 거짓이면 콜론 뒤의 값이 변수에 대입된다.



주석문의 종류에는

//한줄주석

/*

다줄문주석

*/

/**

HTML 문서화 주석처리

/

가 있다. 여기서 HTML문서화 주석처리는 자바에만 있는 주석문으로 java doc라고 한다.


코드에서 세미콜론 앞 까지를 실행문 혹은 수행문이라 한다.

;이 있어야 컴퓨터는 문장이 끝났음을 인식한다.

코드 중간에서 엔터를 입력하거나 탭을 입력해도 컴파일이 달라지지 않는 것이 그 증거이다.


제어문)

분기문(비교문)은 조건에 따라 실행을 달리하는 제어문이다.

if문은 다음과 같이 활용한다.


if(조건식){

실행문;

}

if문에서 실행문이 한 줄일 경우에는 brace를 생략해도 되지만, brace를 입력하는 습관이 되어 있으면 오류 날 확률도 적고 보기에도 좋다.

조건식은 boolean타입의 값을 가져야한다.

다중 if문, if-else, if-else if(조건식)문도 있다.


또 다른 분기문에는 switch 문이 있다.


switch문은 다음과 같이 쓴다.

switch(변수){

case 1:

실행문;

break;

case 2:

실행문;

default:

실행문;

break;

}

소괄호 안에 있는 입력받은 변수의 값이 case옆에 있는 숫자와 일치할 경우 해당 case의 실행문이 돌아간다.

break는 자신이 포함되어 있는 실행문에서 빠져나온다는 뜻으로, switch를 사용할 때에 필수는 아니다. 위와 같은 상황에서는 입력받은 변수의 값이 2일 때 case 2의 실행문을 수행하고, foward해서 default의 수행문도 실행한다.

default역시 switch의 필수 요소가 아니다. default가 있으면 switch를 돌렸을 때 출력 값이 무조건 하나 이상 있다는 것이고, default가 없으면 아무것도 출력되지 않는다.


switch를 이용할 때에는 범위의 값을 변수로 줄 수 가 없다. 

만일 99~90의 변수가 들어왔을 때 "수"를 출력하라고 한다면, if 문의 경우에는 범위를 정해줄 수 있지만 switch는 그렇지 않다.

이 때 정수 사이의 연산을 활용할 수 있다.

int 99~90은 int 10으로 나누었을 때 출력값이 무조건 9라는 점을 활용하면 된다.


문자열을 다루는 data type은 String으로, reference data type이다. 



[], <> 등은 braket이라고 한다.

{} 는 Curly Braces혹은 Braces라고 한다.



반복문에는 while, do-while, for가 있다.

반복문에는 초기값, 조건식, 증감식이 포함된다.

while은 소괄호 안 조건식이 참일 때 반복되며, 조건식이 거짓이 되면 빠져나온다.


do-while은 현업에서 잘 쓰이지 않는다.

do{}에 있는 내용을 먼저 실행시키고, while의 값이 참일 때 do를 반복한다. 

while은 한번도 실행되지 않을 수 있지만, do-while은 적어도 한 번 실행된다.


while은 조건식이 참일 때 반복하므로, 조건식에 (true)를 넣으면 무한루프를 만들 수 있다.

무한루프 밖에 실행문이 있을 경우, 도달할 수 없는 실행문이 있다는 에러가 발생한다.

무한루프를 탈출할 때에는 윈도우 콘솔 창에서 실행했을 경우 콘솔창을 끄거나, 에디터의 실행창에 마우스 우클릭했을 때 나타나는 중지 버튼을 누르거나, 작업관리자를 실행시켜 자바 어플리케이션을 작업 끝내기 하면 된다. 


for는 while과 달리 for()소괄호 내에서 초기값, 조건식, 증감식을 모두 표현할 수 있다.

for(초기값; 조건식; 증감식){}으로 표현하며, CSV는 세미콜론이다.

for와 while의 차이를 말하자면 for문에서는 초기화를 for문 내부에서 한다고 말할 수 있다.

만일 for문 안에서 변수를 선언했다면, for문 내에서만 선언된 변수이며 그 바깥에서는 변수를 인식하지 못한다. 


for문으로 무한루프를 만드는 방법으로는 

for( ;true; ){}

for( ; ; ){}

가 있다. 그러나 while(true)가 훨씬 편하다.


for와 while은 똑같은 작업을 처리하는 것이 가능하며, 상황에 맞게 사용하면 된다.




break, continue, label은 자바에서 잘 쓰이지 않는 C의 잔재다.

자바에서 잘 쓰이지 않는 이유는 클래스와 객체지향에 대해 배우면 알 수 있다.

continue와 break모두 자신이 속한 반복문만 탈출하며, break는 반복문을 종료, continue는 하부실행문을 실행하지 않고 다시 반복문을 실행한다.

만약 continue와 break로 자신이 속한 반복문이 아닌 자신이 속한 반복문이 속한 반복문(

for(){

for(){

break;}

와같이 다중 for문에서, 자신의 속한 반복문 상위의 반복문을 탈출하고 싶을 때에는 상위의 반복문에 이름을 붙여주고 (label) break 뒤에 해당 label 이름을 적는다.

현업에선 쓰이지 않으니 개념만 확인하고 넘어가면 된다. 



* 배열 만들기


배열 역시 자바에서만 쓰이는 것이 아니라 전산의 기초라고 할 수 있지만, 자바의 특성이 조금 포함되어 있다.

배열 Array는 같은 데이터 타입의 묶음이다. 

배열을 사용하는 이유는 각 데이터 하나씩을 관리하는 것보다 배열로 관리하는 것이 효율적이기 때문이다.

이 때 키워드/오퍼레이터 new와 .을 사용한다.

먼저 인트 데이터 타입 어레이를 담을 아이덴티파이어를 선언한다.

int [] arrayName;

이름이 arrayName인 인트 데이터타입의 배열을 선언한 것이다.

이 때 []는 자료형 뒤나 어레이 이름 뒤 중 어디에 적혀도 무방하나 개발자들은 주로 자료형 뒤에 []를 적는다.


그리고 크기가 9인 인트 어레이를 만들어보자. 이 때 new 키워드를 사용한다.

new int [9];

primitive data type은 하나의 값을 입력받는 메모리 공간을 할당한 것이다. 그러나 배열에서는 몇 개의 값을 담을 지 사용자가 정하도록 해 줬는데, 그 키워드가 new이다.

그러면 아직까진 arrayName과는 독립적으로 9개의 요소(인자, 전달인자, args)가 들어갈 수 있는 공간이 만들어진 것이다.


이제 대입연산자를 이용해서 arrayName과 int [9]를 연결해준다.

이 때 int [9]가 arrayName에 대입되는 것이 아니라 int[9]의 위치 정보(reference)를 arrayName의 공간에 넣어준다.


앞의 과정을 한번에 적으면 다음과 같다.

int [] arrayName = new int [9];


배열을 만들 때 배열에 포함될 요소를 안다면 다음과 같이도 적을 수 있다.

int [] arrayName = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9};

int [] arrayName = {1, 2, 3, 4, 5, 6, 7, 8, 9};


int[9]에서 각각 공간의 번호는 0부터 순차적으로 할당된다.

따라서 arrayName[0] 이라고 하면 arrayName이 가지고 있는 배열의 0번 요소 라는 뜻이다.

arrayName[0] = 1; 과 같이 요소를 하나씩 입력할 수도 있다.


만일 배열이 아니라 기본형으로 데이터를 관리했다면, 확인하고 싶은 변수의 개수만큼 System.out.println();을 해야 한다.

그러나 배열로 데이터를 관리할 때에는 for문을 이용해 배열 번호를 순차적으로 반복하여 더 짧은 코드로 관리할 수 있다.

for(i=1;i<arrayName.length;i++){

System.out.println(arrayName[i]);

}

여기 조건식에서 arrayName.length에서는 . 오퍼레이터, 키워드가 사용되었다.

.오퍼레이터는 오퍼레이터 앞에 있는 곳에서 참조하고 있는 정보를 가져와서~ 라는 의미이다.

arrayName이 참조하고 있는 곳에 가면 int[9]가 있고, length는 길이를 의미하는 것이기에 arrayName.length는 9라는 값을 갖게 된다.



2019/02/27 - [IT/JAVA 공부] - [JAVA] system 개발 절차, "플랫폼 독립적"의 의미, 환경변수 잡는 이유

2019/03/03 - [IT/JAVA 공부] - [JAVA] Class path, Byte code, Data type, Operator