프로그래밍 언어(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 * 226

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 > 20false
(10 + 30) <= 20false
10 != 20true

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개의 댓글