본문 바로가기
BACK-END/JAVA

JAVA | 20251117

by codechu 2025. 11. 17.

서론 

  • 자바(JAVA) 언어는 컴파일시 바이트 코드가 되는 언어로, 개발자가 작성한 코드가 바이트 코드로 컴파일되어 운영체제 커널(KERNEL)이 이를직접 읽어들이지 않고 , JRE(HAVA RUNTIME ENVIRONMENT) 가 해당 바이트 코드를 읽어들여 그 결과인 바이너리 코드를 운영체제 커널이 이해할 수 있는 형태로 전달하는 방식을 채택하고 있다.
  • 이러한 방식 때문에 각 운영체제에 맞는 JRE가 적절하게 구축되어 있다면 하나의 코드로 컴파일된 실행 파일로 운영체제와 무관하게 개발 및 실행 할 수 있다는 장점이 있지만, 컴파일 결과가 즉시 바이너리 코드로 변환되는 언어에 비해 속도가 느리다는 단점이 있다.
  • 구문이 끝나면 ' ; ' 을 꼭 붙여야 한다. ( 안 찍으면 컴파일 오류남 )

 

JRE

  • JRE(JAVA RUNTIME ENVIRONMENT)는 자바로 작성된 프로그램을 실행하기 위해 필요한 구성요구의 집합인 소프트웨어이다.

JDK

  • JDK (JAVA DEVELOPMENT KIT)는 자바 언어로 프로그램을 개발하고 실행하기 위한 구성요소의 집한인 소프트웨어이다. 이는 JRE를 포함하고 있다.

JVM

  • JVM(JAVA VIRTUAL MACHINE) 은 자바로 개발된 프로그램을 실행하기 위해 구축된 가상의 환경을 의미한다.
  • JRE 설치 후 실제로 자바로 작성된 프로그램을 구동하여 바이너리 코드로 변환하는 실행 환경이다.

 

진입점

  • 프로그램이 실행되었을 때 가장 먼저 실행될 메서드이다.
  • 진입점이 되는 메서드는 하나의 프로그램 내애서 하나만 있어야 한다.
  • 자바에서 진입점은 아래와 같이 작성한다. 
public static void main(String[] args){
 -> 다 적지 않고 main + tab 하면 됨
}

 

 

print 개행 x

println 개행 함

 

 

타입

  • 타입( type )은 어떠한 값을 담을 수 있는 형태(종류)이다. 크게 기초 타입과 참조 타입으로 나누어져 있다.

기초 타입

  • 기초 타입( 기본 타입, 임시타입, primitive(원시의) Type ) 은 해당 타입의 변수 값이 리터럴(literal)이고 메모리의 스택영역에 값이 직접 할당되는 타입이다.
  • 정수형
    • byte : (1byte) -128이상 127 이하의 수
    • short : (2bytes) -32,768 이상 32,767이하의 수
    • int : (4bytes) -2,147,483,648 이상 2,147,483,647 이하의 수
    • long : (8bytes) -9,223,372,036,854,775,808 이상 9,223,372,036,854,775,807 이하의 수
    • 리터럴 숫자 끝에 L을 붙임으로써 Long 타입의 숫자임을 명시적으로 표현할 수 있다.
    • 보다 작은 타입의 값을 보다 큰 타입에 할당하는 것은 가능하지만, 보다 큰 타입의 값을 보다 작은 타입에 할당하는 것은 (강제 형변환을 통하지 않으면 )허용되지 않는다.
    • 별도의 명시가 없는 정수 표기는 모두 int 타입으로 간주한다.
      •  단, byte나 short 타입에 할당하기 위한 리터럴 정수는 묵시적으로 강제 형변환을 발생시킨다. 보다 상세한 조건은 아래와 같다.
      • -128이상 127 이하의 정수 리터럴을 byte 타입의 변수에 할당하는 경우 
      • -32,768 이상 32,676 이하의 정수 리터럴을 short 타입의 변수에 할당하는 경우
    • 강제 형변환을 통해 보다 큰 타입의 값을 보다 작은 타입의 변수에 할당할 경우 오버플로우/ 언더플로우가 발생할 수 있다.
  • 실수형 
    • float : (4bytes) 1.4e-45 이상 3.4e+38 이하의 실수. 리터럴인 숫자 끝에 F 를 붙임으로써 float 타입의 숫자임을 명시적으로 표현 할 수 있다.
    • double : (8bytes) 4.9e-324 이상 1.79e+308 이하의 실수.리터럴인 숫자 끝에 D를 붙임으로써 double 타입의 숫자임을 명시적으로 표시할 수 있다.
    • 별도의 명시가 없는 실수 표기는 모두 double 타입으로 간주한다.
  • 문자형
    • char: (2bytes) 문자 하나를 담기 위해 사용하는 타입이다. 특수 문자 홑따옴표(')를 사용한다.역슬래쉬(\)를 활용해 특수한 문자를 할당 할 수 있다. 가령, 개행자는 \n 이고 공란(빈값)은 \0와 같다. 문자형 타입의 값은 비어있을 수 없음('')에 유의한다.
    • String(bytes)
  • 논리형
    • boolean:(1byte) 참true 거짓false 을 가진다.

참조타입

  • 참조타입(레퍼런스 타입, Reference type)은 해당 타입이 변수 값이 리터럴이지 않고 (문자열string 제외 ) 메모리의 스택영역에는 힙의 주소가 힙영역에는 실제값이 저장된다.
  • 기초 타입을 제외한 나머지 모든 타입은 참조타입이다.
  • 참조 타입은 new 연산을 통해 객체화(Instantiation) 하여 구현하고, 이 값을 객체라고 한다. 이 객체의 메모리 크기는 가변적이다.
  • 대표적인 참조 타입으로 문자열(string)이 있다. 문자열은 객체화 가정(new)을 생략하고 쌍따옴표("") 특수기호를 통해 리터럴처럼 사용 할 수 있도록 처리되어 있다.

 

변수

  • 변수(variable)은 타입과 이름을 가지고 타입에 부합하는 값을 할당해 활용하기 위해 사용한다. 종류는 지역 변수와 멤버 변수, 매개변수 등으로 나눌 수 있다.
  • 메서드 내에서 변수를 선언할 때 선언부가 속해있는 스코프 혹은 보다 상위 스코프에서 사용중인 이름을 다시 사용할 수 없다. 이는 매개변수를 포함한다.

지역변수

  • 지역 변수(local variable)는 메서드(method)안에 존재하는 변수이다.
  • 지역 변수에 값이 할당된적이 없다면, 값 할당을 제외한 모든 접근이 제한된다.
  • 명명법: 카멜 케이스
  • 선언 방식은 아래와 같다.
[타입] [이름];
-혹은 선언과 동시에 값을 초기화하기 위해 아래와 같이 작성할 수 있다.
[타입] [이름] = 값;

 

멤버 변수

  • 멤버 변수(member variable)는 클래스나 인터페이스 등의 구성요소가 직접 가지는 요소이다.
  • 상수가 아닌 멤버 변수에 값을 할당한 적이 없다면, 자동으로 기본 값이 할당된다.
    • 정수 및 실수 등 숫자 기초 타입:0
    • 문자 기초 타입:\0 ( 널 문자 null character 눈에 보이지 않는 문자)
    • 논리 기초 타입 : false
    • 모든 참조 타입 : null
  • 상수인 멤버 변수의 값은 반드시 직접 할당하거나, 생성자를 통해 초기화하여야 한다.

매개변수

  • 매개 변수(parameter)는 메서드 호출시, 호출자가 전달해주는 인자(argument)를 전달 받기 위해 사용하는 변수이다.

상수

  • 명명법:카멜 케이스
  • 읽기 전용 변수는 편의상 상수라고 많이부르며, final 키워드를 통해 변수의 (스택)값이 한번 할당된 이후로 변할 수 없음을 지정한다.
  • final 키워드를 사용하였다 하더라고 참조 타입의 객체가 가지는 힙 영역의 내용에 대한 불변성(immuntability)이 보장되는 것은 아님으로 엄밀히 말하면 상수(constant)라고 말하면 안 되나, 편의상 상수라고 많이 부른다.
  • 정적인 상수(static final)이며 리터럴(모든 기초 타입 및 string)이거나 그 속성의 불변성을 보장하는 참조 타입인 멤버 변수에 한하여 대문자 스네이크 케이스 명명법을 사용한다.
  • 선언 방식은 아래와 같다.
final [타입] [이름] = [값];
- 지역 변수는 상수로 지정하여도 값 초기화를 반드시 할 필요는 없기 때문에 아래와 같이 선언 할 수 있다.
 final [타입] [이름];
- 상수인 멤버 변수의 값은 반 드시 직접 할당하거나, 생성자를 통해 초기화하여야 한다.