프로그래밍 언어(JAVA)

안세홍·2025년 11월 17일
post-thumbnail

Java 소개

🔹 Java란?

  • 객체지향 프로그래밍 언어(OOP).
  • “Write Once, Run Anywhere” 철학 → 한 번 작성하면 어떤 플랫폼에서도 실행 가능.
  • 플랫폼 독립성(JVM 위에서 동작), 보안성, 자동 메모리 관리가 강점.

🔹 Java의 역사 요약

  • 1995: Sun Microsystems에서 발표 (제임스 고슬링 주도 개발)
  • 2006: Java 핵심 코드 오픈소스화
  • 2010: Oracle이 Sun Microsystems 인수 → Java 관리 주체 변경
  • 2018 이후: 6개월 주기의 정기 릴리즈 체계 도입

🔹 Java의 특징 핵심 정리

  • 객체지향: 클래스 기반, 객체 중심
  • 플랫폼 독립적: JVM 위에서 실행
  • 자동 메모리 관리: Garbage Collection 지원
  • 보안성 강함: 바이트코드 검증 및 안전한 실행 환경 제공
  • 멀티스레드 지원: 효율적인 동시성 처리
  • 풍부한 라이브러리: 표준 라이브러리 + 다양한 오픈소스 생태계
  • 네트워크 친화적: 네트워크 기반 애플리케이션에 최적화
  • 동적 로딩: 필요한 클래스를 동적으로 로딩해 효율 증가

Java 타입

Java의 변수 타입은 크게 기본형(Primitive Type) 과 참조형(Reference Type) 으로 나뉜다.


1) 기본형 타입 (Primitive Type)

구분메모리 저장 방식종류크기표현 범위특징
정수형실제 값을 Stack에 저장byte, short, int, long1B, 2B, 4B, 8B-128~127 … ±2^63-1정수만 저장
실수형실제 값을 Stack에 저장float, double4B, 8BIEEE 754 표준소수 저장 가능
문자형실제 값을 Stack에 저장char2B0~65535 (유니코드)문자 1개 저장
논리형실제 값을 Stack에 저장boolean1Btrue / false논리 값만

🔹 정수형 상세

타입크기표현 범위
byte1바이트-128 ~ 127
short2바이트-32,768 ~ 32,767
int4바이트-2,147,483,648 ~ 2,147,483,647
long8바이트약 ±9.22×10^18

🔹 실수형 상세

타입크기표현 범위리터럴 표기
float4바이트1.4×10^-45 ~ 3.4×10^38F / f
double8바이트4.9×10^-324 ~ 1.7×10^308D / d (생략 가능)

🔹 문자형 / 논리형

타입크기범위
char2바이트0 ~ 65535 (유니코드)
boolean1바이트true, false

2) 참조형 타입 (Reference Type)

구분저장 방식
참조형실제 데이터는 Heap에 저장, 변수에는 주소(참조값) 저장

종류

  • array (배열)
  • enum
  • class
  • interface

특징

  • 인스턴스를 생성한 후 Heap 공간에 저장
  • Stack에는 주소값(참조값)이 저장됨
  • 참조형은 new 키워드를 통해 주로 생성됨

3) Stack 메모리 vs Heap 메모리

🔹 Stack 메모리

  • 메서드 내부의 지역 변수 · 매개변수 저장
  • 메서드 호출 시 생성, 종료 시 함께 제거
  • 메모리 관리가 빠르고 단순함

🔹 Heap 메모리

  • 객체 인스턴스 저장 공간
  • Garbage Collector가 관리
  • 메모리 관리가 복잡함

4) 값 저장 방식 요약

타입저장 위치저장되는 값
기본형Stack실제 값
참조형Stack + HeapStack에는 참조값, 실제 객체는 Heap

5) 기본 데이터 타입 선언 방식

int x;
int y = 3;

double pi, rate, avg;
double height = 180.5, weight = 75.0;

1. 연산자의 전체 종류

연산자 종류연산자설명
형변환 연산자(cast)하나의 값을 지정된 타입으로 변환
산술 연산자+, -, , /, %, +=, -=, =, /=, %=기본 사칙연산 및 대입 복합연산
관계 연산자>, <, >=, <=, ==, !=비교 결과를 boolean값으로 반환
비트 연산자&,, ^, ~, <<, >>, >>>
논리 연산자&&,

2. 산술 연산자 (Arithmetic Operators)

🔹 종류 및 의미

연산자설명
+두 피연산자 더함
-두 피연산자 뺌
*곱셈
/나눗셈 (정수/정수 → 정수)
%나머지 연산
+=, -=, …복합 대입 연산

🔹 산술 연산자 특징

  • 정수/정수 → 정수
  • 실수 계산 시 주의 (1 / 1000.0 = 0.001)
  • 나머지 연산은 정수형에 주로 사용
  • 정수형 나눗셈은 소수점 이하 버림

🔹 예시

int intNum = 13;
double number = 1.1;

number + number → 2.2
intNum * 2 → 26

3. 나누기 & 곱하기 주의사항

  • 정수 나누기 → 항상 정수
  • 실수 나누기 → 실수
  • 연산할 때 자료형에 따라 결과 타입이 결정됨
  • float 타입 나눗셈 시 소수점 이하 오차 발생 가능
  • overflow/underflow 여부 확인 필요

4. 자동 형변환 (Promotion)

🔹 작은 타입 → 큰 타입 자동 변환

byte → short → int → long → float → double

  • 연산 시 피연산자 중 큰 자료형으로 자동 변환됨
  • Object로 저장 후 .getClass().getName()으로 실제 타입 확인 가능

예:

short → java.lang.Short
long → java.lang.Long
double → java.lang.Double

5. 오버플로우 & 언더플로우

🔹 오버플로우(Overflow)

  • 정수 범위를 초과할 때 발생
  • 값이 최소값 또는 최대값으로 순환(wrap-around)

예:

int result = Integer.MAX_VALUE + 1;
→ -2147483648

🔹 언더플로우(Underflow)

  • 표현 가능한 최소 실수 범위보다 더 작아서 0.0이 되는 현상
  • float, double에서 발생

예:

1e-300 * 1e-300 → 0.0

6. 단항 연산자 (Unary Operators)

🔹 종류

연산자설명
++i먼저 증가 후 계산
i++계산 후 증가
--i먼저 감소 후 계산
i--계산 후 감소
+i양수 유지
-i음수 전환

🔹 예시

int i = 3;
i++; → 4
++i; → 5
--i; → 4

7. 관계 연산자 (Comparison Operators)

🔹 종류

연산자설명
>왼 > 오른
<왼 < 오른
>=왼 ≥ 오른
<=왼 ≤ 오른
==같다
!=다르다

🔹 예시

firstNumber = 10;
secondNumber = 20;

10 > 20 → false
(10 + 30) <= 20 → false
10 != 20 → true

8. 논리 연산자 (Logical Operators)

🔹 종류 및 설명

연산자설명
&&AND, 둘 다 true일 때 true
!NOT
^XOR (서로 다르면 true)
?:조건 부 연산자

🔹 Short-Circuit(단락 평가)

  • &&: 왼쪽이 false면 오른쪽 평가 안 함
  • ||: 왼쪽이 true면 오른쪽 평가 안 함

예:

(num1 > num2) && (num1 < num2)

🔹 삼항 연산자 형태

조건식 ? 값1 : 값2

9. 비트 연산자 (Bitwise Operators)

🔹 비트란?

  • 정수를 2진수 형태로 저장
  • 메모리 최소 단위(0 또는 1)

예:

int bTemp = 21
0001 0101

🔹 비트 연산자 종류

연산자설명
&비트 AND
^비트 XOR
~비트 반전
<<왼쪽 시프트
>>오른쪽 시프트(부호 유지)
>>>오른쪽 시프트(부호 무시)

10. 비트 연산자 (AND, OR)

비트 단위로 데이터를 처리하는 연산자.

특정 비트 정보를 추출하거나, ON/OFF 처리할 때 자주 사용.


🔹 AND 연산 (&)

  • 두 비트 모두 1인 경우에만 1 반환
  • 특정 비트만 추출할 때 사용

예)

0x15 & 0x04 → 0x04

🔹 OR 연산 (|)

  • 두 비트 중 하나라도 1이면 1 반환
  • 특정 비트를 켜고 싶을 때 사용

예)

0x15 | 0x02 → 0x17

11. 비트 연산자 예제 (AND, OR)

권한과 같은 플래그 값을 다룰 때 흔히 사용됨.

권한 정의 (예시)

  • read : 1 (0b001)
  • write : 2 (0b010)
  • exec : 4 (0b100)

🔹 권한 추가 (OR)

userPermission |= readPermission;

🔹 권한 확인 (AND)

userPermission & readPermission

🔹 권한 제거 (AND + NOT)

userPermission &= ~readPermission;

12. 시프트 연산자 (<<, >>, >>>)

정수의 모든 비트를 왼쪽/오른쪽으로 이동시키는 연산자.

연산자설명
<<왼쪽 시프트(값이 2배 증가하는 효과)
>>오른쪽 시프트(부호 유지)
>>>오른쪽 시프트(부호 없는 시프트, 앞을 0으로 채움)

예)

0x80000039 << 3 → 0x000001C8

13. 시프트 연산 예제

🔹 암호화에 XOR 사용

encrypted = original ^ key
decrypted = encrypted ^ key

XOR은 (A ^ K) ^ K = A 의 성질을 이용하기 때문.


14. XOR 연산자 (^)

  • 두 비트가 같으면 0
  • 다르면 1
  • 암호화나 비트 토글 등에 흔히 사용됨

예)

0x15 ^ 0x2C → 0x39

15. 비트 연산자 예제 (시프트 + XOR)

>> (부호 유지 시프트)

  • 음수 유지됨

>>> (부호 없는 시프트)

  • 앞자리를 0으로 채움 → 양수처럼 보임

<< (왼쪽 시프트)

  • 4 << 3 = 32

16. 연산자 우선순위

여러 연산자가 함께 쓰이면, 우선순위가 높은 연산자부터 계산됨.


🔹 우선순위 표

우선순위연산자
1(), [], {}, ++/--(postfix)
2!, ~, ++/--(prefix), (cast)
3*, /, %
4+, -
5<<, >>, >>>
6<, <=, >, >=
7==, !=
8&
9^
10
11&&
12
13?:
14=, +=, -=, *=, /=, %=, <<=, >>=, &=, ^=,

🔹 예제 1

c = a + b * d;
// 곱셈이 더하기보다 우선 → b*d 먼저 계산

🔹 예제 2

(condition || false && false) → true
c = e & f ^ d;
  • &가 ^보다 먼저 수행

17. 참조형 데이터 타입과 기본값

기본형과 다르게, 참조형 값은 주소를 저장하며 null 가능.


🔹 참조형 종류

  • 클래스 (Class)
  • 인터페이스 (Interface)
  • 배열 (Array)
  • 열거형 (Enum)

🔹 메모리 크기와 기본값

타입메모리 크기기본값
클래스4바이트null
인터페이스4바이트null
배열4바이트null
열거4바이트null

🔹 기본형과 참조형의 기본값 비교

데이터 타입기본값
byte0
char'\u0000'
short0
int0
long0L
float0.0F
double0.0
booleanfalse
배열/클래스/인터페이스null
profile
나만의 개발 일기

0개의 댓글