본문 바로가기

🌈 Java/Back to Basic 101

자바 기초 정리: Class, Data Types

목차 :

1. class 와 객체?

2. Primitive Type vs. Reference Type

    - 메모리 저장 

3. If vs. Switch 동작 방법

4. ArrayList vs. Linked List

5. @Overloading vs. @Overriding

6. call-by-value& call-by-reference

7. package, import, classPath 

8. Static

9. Stale Data

 

✔️ Class 와 객체 (Object)

Class

: 상태(state) + behavior(행위); 블루프린트 

  • 상태 -> 변수로 지정 
  • 행위 -> 메소드로 지정

> 객체 (Object)

: 소프트웨어 세계를 구현할 대상 ; 클래스 선언대로 생성된 실체 

  • class 의 instance 
  • 객체는 모든 인스턴스 대표하는 포괄적 의미
  • new 를 통해 객체 생성 
  • 클래스만으로 일을 할수 없고, 객체를 생성해야만 우리가 일을 시킬수 있다. 

Instance 

: 소프트웨어 세계에 구현된 구체적인 실체 = **실체화**

  • 실체화된 인스턴스는 메모리에 할당 

예시 )

붕어빵 만들때 틀붕어빵 객체의 틀 = class (껍대기)

만들어진 붕어빵들 = 객체 

 =>  클래스로 인스턴스를 만든다. 

            클래스 - 설계도

            인스턴스 = 객체 - 제품

 

✔️ Primitive Type & Reference Type

 > 차이점:

1. 초기화 하는 방식

    : 초기화 - 변수를 사용할 수 있는 상태로 만들어 주는 것 

  • 기본형 : 값을 바로 넣어준다
  • 참조형 : new 를 사용해서 초기화

2. 메모리 저장 형태

  • 기본형 : 저장 공간에 값 자체를 저장함.
  • 참조형 : 참조 값 (주소)를 가지는 자료형 

🌟 Java 의 Stack 과 Heap 

> Stack 

  • Heap 영역에 생성된 Object 타입의 데이터 참조값 할당 
  • primitive type 의 데이터가 값과 함께 할당 > 실제 값 직접 저장 
  • 지역변수들은 scope에 따른 visibility 가짐
    • 다른 함수에서 접근 X
  • 각 스레드는 자신만의 stack 보유
    • 스레드가 새로 생성될때 stack 함께 생성되며 다른 스레드의 stack은 접근 불가능 

예시 )

public class Main {
    public static void main(String[] args) {
        int argument = 4;
        argument = someOperation(argument);
    }

    private static int someOperation(int param){
        int tmp = param * 3;
        int result = tmp / 2;
        return result;
    }
}
Stack main() someOperation() main()
4   result = 6  
3   tmp = 12  
2   param = 4  
1 argument = 4  arguement = 4  argument = 6

 

> Heap

  • 주로 생명주기가 긴 데이터들 저장 (object 크기 크고 다른 코드 블럭에서 공유 가능한 경우)
  • 메모리 중 stack 데이터 제외한 모든 데이터
  • Reference Type (Integer, String, ArrayList) heap 영역에 생성 
  • 몇개의 스레드가 존재하던 하나의 heap 영역만 존재
  • Heap 영역에 있는 object를 가르키는 reference variable이 stack 에 올라간다. 

예시)

public class Main {
    public static void main(String[] args) {
        List<String> listArgument = new ArrayList<>();
        listArgument.add("yaboong");
        listArgument.add("github");

        print(listArgument);
    }
}