Kim-Baek 개발자 이야기

자바 기본 (5) - 시험, 조건문, 반복문 본문

개발/java basic

자바 기본 (5) - 시험, 조건문, 반복문

김백개발자 2020. 9. 26. 02:34
예전에 자바를 처음 공부하던 때, 네이버 블로그에 정리한 내용을 이제 티스토리로 옮기고자 한다

 

​시험

1. JRE의 의미(역할)와 구성 요소를 적으세요. 

 Jave Runtime Environment 의 줄임말로 자바 실행 환경을 의미한다. 자바로 만든 프로그램을 실행하기 위한 환경을 의미한다.

Java program 같은 경우는 o.s, h/w(platform)에서 실행되는 것이 아니라 JRE 위에서 실행된다. ? 자바가 interpreted 방식이기 때문이다.

JRE 의 구성요소로는 첫 번째로 interpreter 역할을 하는 JVM (Java Virtual Machine) 있다. JVM 의 경우 자바 프로그램의 입장에서는 o.s 이자 h/w 역할을 모두 다 한다고 볼 수 있다.

 

두 번째로 API(Abstract Programming Interface) 가 있다. API 의 경우 자주 사용될 만한 기능을 미리 만들어서 코드로 제공하는 것을 의미한다. 다른 말로 Library 라고도 불린다. API  Core API , 확장 API 가 존재한다. Core API 의 경우 Java 에서 기본적으로 제공하는 API 이기 때문에 모두가 사용하는 API 이지만, 확장 API 의 경우는 사용자가 설치를 해서 사용하기 때문에, 동일한 API 가 없으면 프로그램이 실행이 되지 않는 경우가 존재한다. 

JRE 에 개발을 하기 위한 Tool 을 추가하면 JDK 가 된다. 

JDK 설치한 후에 환경 설정이 필요하다. JAVA_HOME 을 추가해준다. 서버를 동작할 때, JAVA_HOME을 찾아 JDK를 찾기 때문에 꼭 설정해주는 것이 좋다.

Path 설정 또한 필요한데, 현재 디렉토리에 없는 Javac.exe 와 같은 프로그램을 지정하기 위해서 필요하다. 

 

2. 변수의 역할을 간단히 정의 하세요. 

 

프로그램은 데이터()을 조작하는 것을 의미한다. 값의 경우 Literal 과 변수로 나누어지는데, Literal 의 경우 단순한 값을 의미하고 변수는 Literal 과 같은 값을 저장할 수 있는 공간을 의미한다. Literal 자체로 값을 출력할 수 있으나 변수에 Literal 을 저장해서 사용할 수 있다. 변수를 사용하는 의미로는 재사용이 편리하고, 변수의 이름을 통해 어떤 값의 의미를 명확하게 표현할 수 있기 때문이다.

변수를 사용하기 위해서는 우선 선언이 필요하다. 선언은 변수를 사용하겠다고 말하는 것으로 형식은 ‘DataType 이름의 형식으로 사용된다. 

변수에 값을 집어넣는 것을 대입이라고 한다. 형식은 변수명 = ;’의 형태로 사용된다. 특별하게 변수에 처음 값을 넣는 것을 초기화라고 한다.

변수에도 따로 상수라는 값이 존재한다. 상수는 한번 값이 들어가면 더 이상 값이 변하지 않는 데이터를 의미하는데 변수의 선언에 final 을 붙여서 사용한다. 

데이터의 선언에서 DataType 을 지정하면 지정된 DataType 의 값만 들어갈 수 있으며, DataType 은 변환이 불가능하다.

변수의 선언과 초기화는 한꺼번에 가능하다. 선언은 한번에 한가지의 변수만 가능한 것은 아니라 수많은 변수를 선언함과 동시에 초기화도 가능하다.

 

3.  340 의 데이터 타입은? 

 

정수에는 네 가지 타입이 있다. Byte, short, int, long 네 가지가 존재한다. 이 네 가지 중에서 정수의 기본형이 되는 타입은 int 이기 때문에 정수는 기본적으로 int 타입이 된다.

실수에는 두 가지 타입이 있다. Float , double 인데 여기서 기본이 되는 타입은 double 이고 계산이 정밀하지 않기 때문에 계산을 할 때는 primitive 타입이 아닌 bigDecimal 타입으로 하는 것이 좋다.

 

4. long num = 300000000000; 앞의 코드는 컴파일 하면 오류가 납니다. 에러가 나는 이유를 간단히 적고 수정해 보세요. 

 

3000억은 long 데이터에 들어갈 수 있으나, 정수의 기본형으로 쓰여 있기 때문에 int 타입으로 설정이 되어있다. 데이터 타입을 바꾸기 위해서는 우선 임시로 값을 저장해야 하는데, int 타입에 3000억은 저장이 되는 범위를 벗어나기 때문에 오류가 난다.

Long num = 300000000000L ; 로 수정하면 실행이 된다. 

계산의 경우 365*365*365*365*365*365*365*365 이렇게 반복될 경우 값이 int 의 범위를 넘어가게 되면 이상한 값이 나오게 된다. 이 경우 앞에 Long 값을 넣어 결과 값의 범위를 넓혀주는 것이 필요하다.

 

5. 핸드폰 번호를 저장하기 위한 변수를 선언하고 값을 초기화 하세요. (선언 초기화를 한번에 하세요.) 

핸드폰 번호의 경우 0 으로 시작하게 된다. 만약 단순하게 int 값으로 저장하게 되면 0 으로 시작하는 숫자는 8진수 표기가 되기 때문에 올바른 값이 들어가지 않는다.

따라서 String hp = “01047658214”; 와 같이 문자열로 저장하는 것이 올바른 선언이다. 

Java 1.7 버전 이상에서는 int I = 200_000_000; 에서 사용하는 underbar 가 가능하다 

 

 

6. int x = 10; int y = x ++; System.out.println(x); System.out.println(y); 위 코드 실행결과로 출력되는 값을 적으세요. 

11

10

증감연산자의 경우 변수에 ++, -- 가 붙게 된다. 의미는 변수 ++ 의 경우 변수 = 변수 + 1; 을 의미한다. 증감연산자가 변수의 앞이나 뒤에 붙은 것은 의미가 달라지는데, 앞에 붙어있으면 먼저 증감의 연산을 하고 나머지 연산을 하는 것이고, 뒤에 붙으면 다른 연산 후에 증감 연산을 실행하라는 것을 의미한다.

비교, 논리 연산자의 경우 결과는 항상 Boolean 값이 출력된다. Boolean 은 다른 타입으로 변환이 되지 않기 때문에 항상 유의해서 사용해야 한다.

논리 연산자는 &, |, ^, ! 네 개가 존재한다. &  | 의 경우 피연산자 중 앞의 값에 따라 결과가 결정되는 경우가 있다. 뒤의 값을 보지않고 바로 실행하기 위해서는 &&, || 를 사용하면 가능하다.

비트 연산자의 경우 두개의 &, | 을 쓰는 경우는 없다.

 

7. marriage라는 변수의 타입이 boolean 일때, marriage true이면 "기혼" false이면"미혼"을 출력하는 코드를 삼항연산자를 이용해 적으세요. 

 삼항연산자의 경우 조건()? Value 1 : Value 2; 라는 형식으로 사용된다. 조건이 true 이면 첫 번째 결과 값인 Value1 이 출력되고, false 이면 두 번째 결과값인 Value2 가 출력된다.

System.out.println(marriage? “기혼” : “미혼”); 삼항연산자는 if 문으로도 변환이 가능하다

If(marriage)

{

           System.out.println(“기혼”);

} 

Else

{

           System.out.println(“미혼”);

}

 

 

8. 다음의 값을 저장하기 위한 변수의 타입으로 적당한 것을 적으세요. - 회사주소, 고객이름, TV가격, 메일수신여부, 제조사명, 이자율

회사주소 : String companyName; -> 단어 두 개를 연결을 시킬 때는 Camel 표기법에 의해서 두번째단어부터는 첫 글자를 대문자를 사용하자

  • 상수의 경우 final 을 붙여서 사용하는데 상수명은 모든 글자를 대문자로 사용

고객이름 : Stirng customerName;

TV 가격 : int tvPrice;

메일수신여부 : Boolean mailing;

제조사명 : String

이자율 : double bankRate;

◎if 문과 else if 문의 사용법

if(조건 A){

}else if(조건 B){

나                -> 구문을 한개로 취급한다. 가, 나, 다 셋 중 하나를 실행한다.

}else if(조건 C){             한 조건에 걸리면 나머지는 보지 않는다.

}

 

if(조건 A){

}if(조건 B){

나              -> 3개, 2개, 1개, 0개 실행 모두가 가능하다. 3개의 구문으로 이루어져 

}if(조건 C){                있기 때문이다.

}

 

◎Switch(case) 문 : 다수의 (동등비교) 조건에 동일한 구문을 실행하는 경우 사용 -> if 문이라면 ||(or) 연산

- if 문이 할 수 있는 일중에서 동등(==)연산만 빼온 것이다.

- switch 문은 int 값만 사용이 가능하다 (더 작은 타입인 char,short,byte 는 가능)

◎Switch 문의 사용법

switch(비교대상 값){   - 비교대상 값에는 일반적으로 변수가 들어간다. int 형이 들어가나 

case 비교값1:     byte, short, char 도 들어가면 자동으로 int 로 변환

실행할 구문(들) - A

case 비교값2:

실행할 구문(들) - B

defaulf :

실행할 구문 - C

}

-> 비교대상 값이 == 비교값 1 이면 A 실행

      == 비교값 2 이면 B 실행

           둘다 아니면 C 실행

​ex) int x = 10;

switch(x){            *   x 가 10이면 A만 실행 후 끝나는 것이 아니라 A,B,C,D 모두 실행 

case 10:         x 가 30 이면 C,D 실행

A;           -> 한 구문에서 걸리면 멈추지 않고 뒤의 모든 구문 실행

case 20:     * 만약 if 문 처럼 한 구문 실행 후 멈추고 싶으면 break 를 그 구문 

B;       에 추가하자

case 30:

C;

defaulf:

D;

}

※break 문

- break 문을 만나게 되면 { } (코드블럭) 을 빠져나가자 라는 의미이다.

 

ex)

1.

if(x == 10 || x == 20 || x ==30)

{

A

}

2. 

if(x == 10)

{

A

}

else if(x == 20)

{

A

}

else if(x == 30)

{

A

}

-> 1번 if 문과 2번의 if, else if 문은 형식은 다르지만 내용은 동일하다.

3.

switch(x){

case 10:   -> case 10, case 20 에서 아무것도 실행하지 않아도 구문이 끝나지 않고

case 20:       뒤의 구문들을 모두 실행한다.

case 30:        (if 의 경우 실행하는 값이 없더라도 조건이 만족되면 구문을 감)

A

break;

}

※자바 1.5 버전에서 switch 문에서 enum 타입 사용 추가, 자바 1.7 버전에서 String 이 추가

※ String 과 String 이 같은 값(문자여) 인지 비교시 == 연산을 사용하면 안되고 equals() 를 사용해야한다.

ex)
if(city == "서울") 은 잘못된 구문이다. "abc".equals("ded");


   if (city.equals("서울"))
   {
    System.out.println("한국의 수도");
   }
  

◎ 반복문 : 조건(식)이 true(boolean) 인 동안 특정구문을 반복한다.

-> 반복구문 1. 같은 구문을 반복한다. 2. 규칙적으로 변하는 구문을 반복

만들고자 하는 내용이 "~ 동안 ~한다 , ~ true 인 동안 ~ 한다" 라면 반복문의 사용을 생각해보자

- ​for, while : 0번 이상 반복할 때 사용된다

   -> for 문은 유한반복에서 사용하는 것이 편리

       while 문은 무한반복에서 사용하는 것이 편리 (프로그램은 유한 반복이 많이 때문에for 문을 더 많이 사용한다)

- do-while : 1번 이상 반복할 때 사용된다

 

※for , while , do-while 은 서로 하는 일이 동일하다. 세 개나 있는 이유는 특정한 상황에서 편한 것이 존재하기 때문이다.

※if 문 안에 switch 문은 포함된다. 모든 switch 문은 if 문으로 바꿀 수 있지만 모든 if 문을 switch 문으로 바꿀 수 는 없다.  switch⊂if

 

◎for 문의 구문

for( [초기식] ; [조건식]; [증감식]) -> 모든 구문이 다 생략가능  ex)for( ; ; )

{

(반복할) 구문

}

- 초기식 : 변수의 선언 및 초기화 -> 선언 변수의 갯수 제한 x, 단 같은 type만 가능

ex) for(int x =10

     for(int x = 10, y = 20

     for(int x = 10, double d = 20.5;  -> X

- 조건식 : boolean 값이나 boolean 값이 나오는 연산만 가능하다 -> 생략을 하게되면 true 를 의미하게 된다. 조건식 1개만 가능하다(두개 이상이면 하나만 true이고 다른 하나가 false 인 경우 문제가 발생)

 

-증감식 : 연산식 -> 조건식의 조건을 변화시키기 위한 식 (대입문!)

​ex) for( int x = 0; x < 10; x = x + 1)

{

System.out.println("안녕하세요");

}

 

◎ for 구문의 순서

for(①초기식; ②조건식; ③증감식){  - 초기식과 증감식은 조건식을 false로 바꾸기 위해 사용

④반복 구문

 ① ->② 이 true 이면 -> ④ -> ③ 후에 ② ->④ -> ③ 만약 ②이 fasle 이면 종료

 

◎ while 문의 순서

while(①조건식){  -> 조건식의 경우 boolean 1개로 이루어진다.

②반복할 구문

}

 ①이 true 이면 -> ② -> ①true 이면 ->② ->...... ->① 이 false 이면 종료

 

◎ while 문의 사용 -> for 문과 동일하게 사용이 가능하다

초기식

while(조건식){

반복구문

증감식

}

ex) 

int i = 0;

while( i<10){

System.out.println("안녕"); i++;

}

만약 while(true) 이면 무한 반복이 된다.

 

​※ while, for 문의 경우 한번도 실행 안  있다. 그런데 사용자로부터 값을 받아서 시작(심지어 값을 받는 것 조차 반복구문) 일 경우가 있다.

whie, for(조건식){

사용자로부터 값을 받는다.   -> whie, for 문의 밖에 있어야 값을 받아 조건과 비교가 가능해진다.

}

-> 이럴 경우에 1번 이상의 반복이 필요할 경우가 생기게 된다.

 

◎do - while

초기식

do{

반복구문

증감식

}while(조건식);

반응형
Comments