관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

[Spring반] 중간시험 1 - Java 이론 시험 및 문제 풀이 1 : 문제 1~6번 <자료형과 연산자> 본문

개발 포트폴리오/수료증 및 시험

[Spring반] 중간시험 1 - Java 이론 시험 및 문제 풀이 1 : 문제 1~6번 <자료형과 연산자>

huenuri 2024. 12. 4. 01:59

지난 8월 초에 인사교 첫 시험을 치렀다. 지난번에 기말 시험을 블로그에 학습일지로 올리니 어떤 시험을 보았는지 알 수 있어서 참 좋았다. 나중에 이 모든 것들은 추억이 될 것 같다. 이제 수업 시간에 배운 진도들은 대부분 공부했으니 전에 보았던 중간 시험 문제도 다시 풀어보며 정리해도 될 것 같다.

그리고 지난 기말 시험에서 스프링 실기 문제는 거의 풀지 못했는데 이 문제는 스프링 공부를 마치고 다시 풀어볼 예정이다. 우선 내일 새벽까지 해서 중간 시험을 모두 정리해보려고 한다.

 

그리고 특강도 정리할 게 남아있고 밀린 일기도 써야 하고, 수료식 행사까지 기록할 것들이 많이 있다. 오늘은 시험도 보고 그동안 빠르게 달려왔던 시간들을 정리하는 재충전의 시간으로 삼을까 한다.

시험 과목들은 다음과 같다. 웹, 자바, SQL, 파이썬 이렇게 네 과목이다. 우선 자바 시험부터 치뤄볼 것이다. 어제까지 공부한 것으로 자바 시험을 치르기에는 충분하다.


 

 

 

 

JAVA 이론 시험

 

문제 1번

다른 프로그래밍 언어와 다른 Java 언어의 특징인 WORA에 대해 서술하시오.

 

WORA는 "Write Once, Run Anywhere"의 약자로, 한 번 작성한 코드가 다양한 플랫폼에서 실행될 수 있다는 의미이다. 이 특징은 Java가 플랫폼 독립성을 제공하기 때문에 가능하다.

구체적으로, Java는 코드를 Java 바이트코드로 컴파일하고, 이 바이트코드는 Java Virtual Machine(JVM)을 통해 실행된다. JVM은 각 운영 체제와 하드웨어에 맞게 구현되어 있어서, 동일한 바이트코드가 다양한 환경에서 동일하게 실행될 수 있다.

 

예를 들어

  1. Windows에서 작성한 Java 프로그램을 컴파일하면 바이트코드가 생성된다.
  2. 이 바이트코드를 macOS나 Linux의 JVM에서도 실행할 수 있다.
  3. 개발자는 운영 체제나 하드웨어에 따라 프로그램을 따로 수정할 필요가 없다.

이로 인해 Java는 크로스 플랫폼 개발에 적합하고, 특히 서버 애플리케이션, 모바일 앱(Android), 웹 애플리케이션 등 다양한 분야에서 많이 사용된다. WORA는 개발 시간을 줄이고 유지 보수를 쉽게 만들어주는 큰 장점이 있다.


 

 

 

 

 

문제 2번

JDK와 JVM이 무엇인지 서술하시오.

 

JDKJVM은 Java의 핵심 구성 요소로, 각각의 역할과 목적이 다르다.

 

1. JVM (Java Virtual Machine)

  • 역할 : JVM은 Java 프로그램을 실행하는 환경이야. Java로 작성된 코드는 바이트코드(bytecode)로 컴파일되는데, 이 바이트코드를 실제 머신에서 실행할 수 있도록 변환하고 실행하는 게 JVM의 역할이다.
  • 주요 기능
    • 바이트코드 실행 : Java 컴파일러가 생성한 바이트코드를 읽어서 실행
    • 플랫폼 독립성 제공 : 각 운영 체제마다 JVM이 따로 구현되어 있어서, 동일한 바이트코드를 다양한 플랫폼에서 실행할 수 있게 함
    • 메모리 관리 : Garbage Collection을 통해 메모리를 자동으로 관리
    • 보안 : 바이트코드를 실행하기 전에 검증 과정을 거쳐 악성 코드를 방지

 

2. JDK (Java Development Kit)

  • 역할 : JDK는 Java 애플리케이션을 개발하고 실행할 수 있는 도구 모음이다. JDK 안에 JVM도 포함되어 있어서, Java 애플리케이션을 실행할 수도 있다. 하지만 JDK는 실행만이 아니라 개발에 필요한 기능도 제공한다.
  • 구성 요소
    • 컴파일러 (javac) : Java 소스 코드를 바이트코드로 컴파일
    • JVM : 바이트코드를 실행하는 환경
    • 라이브러리 : 표준 Java API(클래스, 인터페이스 등)를 포함
    • 도구들 : Javadoc(문서화), JAR(압축), 디버거 등 개발에 필요한 다양한 도구가 포함됨

 

요약

  • JVM : Java 프로그램을 실행하는 역할
  • JDK : Java 프로그램을 개발하고 실행할 수 있는 도구 모음

즉, JDK는 개발자용이고, JVM은 실행 환경이다. JDK를 설치하면 JVM이 포함되어 있으니, Java 개발자는 보통 JDK를 설치하면 된다.

 


 

 

 

 

 

문제 3번

Java 기본 자료형 8가지와 크기를 작성하시오.

 

자바의 기본 자료형은 총 8가지이고, 각각은 크기와 용도가 다르다. 이제 자료형, 크기, 그리고 역할을 정리해 보겠다.

 

1. 정수형 (4가지)

  1. byte
    • 크기 : 1 byte (8 bits)
    • 범위 : -128 ~ 127
    • 용도 : 메모리 절약이 필요한 경우, 특히 대량의 데이터 처리에 사용
  2. short
    • 크기 : 2 bytes (16 bits)
    • 범위 : -32,768 ~ 32,767
    • 용도 : 메모리가 제한적인 환경에서 byte보다 큰 정수를 다룰 때 사용
  3. int
    • 크기 : 4 bytes (32 bits)
    • 범위 : -2,147,483,648 ~ 2,147,483,647
    • 용도 : 기본 정수 자료형으로, 일반적인 숫자 계산에 사용
  4. long
    • 크기 : 8 bytes (64 bits)
    • 범위 : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
    • 용도 : int로 표현할 수 없는 큰 숫자를 다룰 때 사용 (예: 금융 계산)

 

 

2. 실수형 (2가지)

  1. float
    • 크기 : 4 bytes (32 bits)
    • 범위 : ±3.40282347E+38F (근사값)
    • 용도 : 단정도 실수 표현. 소수점이 있는 숫자에서 메모리를 절약할 때 사용
  2. double
    • 크기 : 8 bytes (64 bits)
    • 범위 : ±1.79769313486231570E+308 (근사값)
    • 용도 : 배정도 실수 표현. 더 높은 정밀도가 필요한 계산에서 사용

 

3. 문자형 (1가지)

  1. char
    • 크기 : 2 bytes (16 bits)
    • 범위 : 0 ~ 65,535 (유니코드 문자)
    • 용도 : 단일 문자 표현. 유니코드 기반으로 다양한 언어를 지원

 

4. 논리형 (1가지)

  1. boolean
    • 크기 : 1 bit (값 자체는 1 bit로 표현되지만, 구현 방식에 따라 메모리 사용량이 다를 수 있음)
    • 값 : true 또는 false
    • 용도 : 조건문, 논리 연산 등에서 참/거짓 값을 다룰 때 사용

 

정리

자료형 크기 범위 용도
byte 1 byte -128 ~ 127 메모리 효율적인 정수
short 2 bytes -32,768 ~ 32,767 작은 정수 처리
int 4 bytes -2,147,483,648 ~ 2,147,483,647 일반적인 정수 계산
long 8 bytes -9,223,372,036,854,775,808 ~ ... 큰 정수 계산
float 4 bytes ±3.40282347E+38F 단정도 실수
double 8 bytes ±1.79769313486231570E+308 배정도 실수
char 2 bytes 0 ~ 65,535 유니코드 문자
boolean 1 bit true/false 논리 연산

 

이렇게 자바는 총 8가지 기본 자료형으로 숫자, 문자, 논리값을 효율적으로 다룰 수 있도록 지원한다.


 

 

 

 

문제 4번

%연산자과 / 연산자의 차이점을 서술하시오.

 

자바에서 % 연산자와 / 연산자는 숫자를 다룰 때 사용하는 연산자지만, 각각의 역할이 다르다.

 

 

1. / 연산자 (나눗셈 연산자)

  • 역할 : 두 숫자를 나누고 을 반환
  • 특징
    • 정수 연산 : 피연산자가 정수라면 결과도 정수로 반환된다. 소수점은 버려지고 몫만 남음
    • 실수 연산 : 피연산자 중 하나라도 실수라면 결과는 소수점까지 포함됨
       
// 정수 연산
System.out.println(10 / 3); // 출력: 3

// 실수 연산
System.out.println(10.0 / 3); // 출력: 3.3333333333333335

 

 

 

2. % 연산자 (나머지 연산자)

  • 역할 : 두 숫자를 나눈 뒤 나머지를 반환
  • 특징
    • 정수와 실수 모두 지원
    • 나머지를 계산하기 때문에 반복되는 패턴이나 배수 검증 등에 유용
System.out.println(10 % 3);  // 출력: 1 (정수 나눗셈의 나머지)
System.out.println(10.5 % 3); // 출력: 1.5 (실수 나눗셈의 나머지)

 

if (number % 2 == 0) {
    System.out.println("짝수");
} else {
    System.out.println("홀수");
}

 

 

차이점 요약

연산자 결과 주요 용도
/ 나눗셈의 결과(몫)가 필요할 때
% 나머지 배수 여부 확인, 반복 패턴 계산 등

 

 

예제 풀이

 

 

이렇게 /는 , %는 나머지를 반환한다는 점이 가장 큰 차이점이다.


 

 

 

 

 

문제 5번

&&(AND) 와 연산자 ||(OR) 의 차이점에 대해 서술하시오.

 

&&(AND)와 ||(OR)는 자바에서 사용하는 논리 연산자로, 둘 다 조건식에서 참(true)과 거짓(false)을 평가할 때 사용된다. 각각의 동작 방식과 차이점은 다음과 같다.

 

1. && (AND 연산자)

  • 역할 : 두 조건이 모두 참(true)일 때 전체 결과가 참이 됨
  • 특징
    • 하나라도 거짓(false)이면 전체 결과는 거짓(false)
    • 단축 평가(short-circuit evaluation) : 첫 번째 조건이 거짓이면 두 번째 조건은 평가하지 않아도 전체 결과가 거짓이므로, 실행되지 않음
if (a > 0 && b > 0) {
    System.out.println("a와 b 모두 양수");
}

 

위 코드에서 a > 0이 거짓이면 b > 0은 평가되지 않는다.

 

  • 진리표
조건 A 조건 B A && B
true true true
true false false
false true false
false false false

 

 

 

 

2. || (OR 연산자)

  • 역할 : 두 조건 중 하나라도 참(true)이면 전체 결과가 참이 됨
  • 특징
    • 두 조건이 모두 거짓(false)일 때만 전체 결과가 거짓(false)
    • 단축 평가(short-circuit evaluation) : 첫 번째 조건이 참이면 두 번째 조건은 평가하지 않아도 전체 결과가 참이므로, 실행되지 않음
if (a > 0 || b > 0) {
    System.out.println("a 또는 b 중 하나는 양수");
}

 

위 코드에서 a > 0이 참이면 b > 0은 평가되지 않는다.

 

  • 진리표
조건 A 조건 B A || B
true true true
true false true
false true true
false false false

 

 

 

예제 풀이

 

 

a, b 중 하나만 양수이므로 AND 조건 실패, a 또는 b 하나는 양수라는 문장이 출력된다. 만약 이 둘을 모두 양수라고 하면 어떻게 될까?

 

 

 

 

 

 

a, b 모두 양수이므로 이러한 문장이 출력된다. 

 

 

핵심

  • && : 조건 모두가 참이어야 결과가 참
  • || : 하나만 참이어도 결과가 참

 

 

 

 

 

문제 6번

아래 두 코드를 보고 차이점을 서술하시오.

 

예시 1

 

 

이 식에서는 선위 증가연산자로 먼저 연산한 다음에 출력이 되기에 5에서 1이 증가한 6이 출력된다.


 

 

 

 

예시 2

 

 

두 번째 식은 후위 증가연산자로 출력이 된 다음에 증가하기 때문에 현재는 5 그대로이며 출력 이후 1이 증가되어 있다.


 

 

 

 

학습을 마치고

중간 시험문제를 다시 풀어보니 정말 많은 공부가 되고 좋았다. 사실 선생님께 보낸 카톡방의 자료가 남아있다면 그냥 복사하여 붙여 넣었을 테지만 자료를 유실함으로 오히려 내게 더 좋은 일이었다.

이론 문제가 20문제나 있어 아직 다 풀려면 멀었지만 오늘 새벽에 일찍 일어나 공부할 수 있는 이 시간이 정말 기쁘고 행복하다. 역시 밤에 느끼는 감정과는 전혀 다르다. 오늘은 평소보다 1시간 더 일찍 일어나 12시 반에 공부를 시작해 보았다.