본문 바로가기
Study with me/TECH!T back-end shcool 7

week_01 JAVA 1/?

by 외계나무 2023. 10. 20.

main 함수

public class Main() {
    public static void main(String[] args) {
        System.out.println();
    }
}
  • public static void main(String[] args){} == 해당 프로젝트의 run 시작점 == entry point
  • System.out: 표준 출력(Standard Output)을 나타내는 객체
    System.out은 java.io.PrintStream 클래스의 인스턴스로, 콘솔에 텍스트를 출력하는 데 사용된다.


변수

1. 기본 변수(8)

// 논리형
boolean isFun = true;  

// 문자형
char c ='k';  

// 정수형
byte b = 1;  
short s = 2;  
int x = 59;  
long big = 3456789L;  // long 타입 값에는 소문자 l이나 대문자 L을 붙여야 합니다. (보통 L)  

// 실수형
float f = 32.5f; // float 타입 값에는 소문자 f나 대문자 F를 붙여야 합니다. (보통 f)  
double d = 23.34;  

2. 참조형 변수

배열, 클래스, 인터페이스 등: 다른 변수에 의해 참조되는 변수

→ 이를 참조하는 변수들은 해당 변수에 실제 값 대신 메모리 상의 객체에 대한 주소를 저장한다.


메모리 영역

실행중인 프로그램 == 프로세스

물리적인 메모리는 제한되어 있으나, 각 os는 추상화를 통해 한 프로세스당 가상 메모리 하나(1 RAM)를 할당한다.
(→ RAM은 항상 부족하기 때문에, os는 항상 다양한 최적화 방식으로 자원절약에 매달린다.)
그리고 그 메모리는 힙과 스택으로 나뉜다.

( 코드 영역 / 데이터 영역 : ...일단 생략 )
힙 영역 <<< 객체가 생성되는 메모리 영역. 참조형 변수로 선언된 객체는 그 데이터를 힙에 저장하고, 그 주소만 가지고 있게 됨.
스택 영역 <<< 지역변수가 저장되는 영역. 기본 변수로 선언한 값은 여기에 저장되며, 힙에 저장된 참조형 변수의 주소값이 참조됨. 데이터는 아래부터 쌓임.

  • 스택 영역에 저장(참조)되는 힙의 주소값은 해당 주소의 첫번째 부분에 포인터를 두고 있기 때문에, 주소가 어디있든 스택 영역에 저장된 주소값의 크기는 같다.
    → Java에서는 같은 환경과 아키텍처 내에서 String과 정수 배열의 스택에 저장된 주소값의 크기가 동일하다. (일반적으로 64비트 JVM에서는 8바이트 크기)
    → 즉, String a = "this_is_string_data"와 int[] array = {1,2,3} 모두 참조형 변수로서 힙 영역에 실제 객체가 생성되고 해당 객체의 주소를 스택 영역에 저장한다. 따라서 두 변수의 주소값을 저장하는 스택 영역의 공간은 일반적으로 동일한 크기로 주어진다. 물론 JVM 구현체마다 세부 사항이 다르게 처리될 수 있으므로 절대적이지 않으나, 같은 환경과 아키텍처 내에서라면 대부분 모든 참조변수의 주소값은 스택 영역 내에서 동일한 크기로 처리된다.


메모리 자동 반납

할당된 메모리는 쓸모가 다하면 가비지 컬렉터에 의해 자동으로 반납된다.

  1. 지역변수는 해당 범위(scope)의 함수가 끝났을 때 같이 소멸한다. (가비지 컬렉터에 의해 kill된다)

  2. 그러나 그 전이라도, null 값이 할당되면 해당 메모리는 소멸한다. (가비지 컬렉터에 의해 kill된다)


    객체의 경우, 그 어떤 참조 변수도 객체를 가리키지 않을 때 (해당 객체의 주소값을 가지는 변수가 없을 때) 가비지 컬렉터에 의해 자동으로 소멸된다. 이는 앞서 객체를 가리키고(참조하고) 있던 참조 변수가 다른 객체를 가리키거나, null값을 할당 받았을 때 모두 해당된다. (물론 가비지 컬렉터보다 먼저 강제적으로 메모리 반납하는 방법도 있음)


String 관련

1. 문자열 결합 연산

System.out.println("hi"+23); => hi23
: Java의 "문자열 병합 규칙(String Concatenation Rules)"에 의해 정의된다. 해당 규칙에 따르면, 문자열과 다른 타입 간의 결합 연산(+)은 다음과 같이 처리된다.

  • 만약 두 개의 피연산자 중 하나가 문자열이라면, 다른 피연산자를 문자열로 변환한 후 두 개의 문자열을 결합한다.
  • 그렇지 않은 경우, 두 피연산자를 숫자형으로 취급하고 일반적인 산술 덧셈 연산을 수행한다.


2. 자주 쓰는 String 함수

str.substring(index);  // index부터 자르기  
str.substring(start, end);  // start부터 end 전까지 자르기  
strA.concat(strB);  // strA에 strB 붙이기  
str.length();

'Study with me > TECH!T back-end shcool 7' 카테고리의 다른 글

week_02 JAVA 3/?  (1) 2023.10.24
week_02 JAVA 2/?  (0) 2023.10.23
WIKI  (0) 2023.10.20
week_01 GIT 2/2  (1) 2023.10.19
week_01 GIT 1/2  (0) 2023.10.18