백엔드 4일차 - 자바 : 변수

parang·2025년 4월 13일

LG CNS AM Inspire Camp 2기

목록 보기
15/50

변수

클래스 변수 : 클래스 영역에 쓰이는 변수.
1. 전역 변수 2. 스태틱 변수가 있음.

int 전역변수 = 10;
static int 전역변수2 = 10;

나머지는 모두 지역변수.

메모리에 저장되는 시점

<클래스>

메소드가 불릴 때 메모리에 저장된다. (static)

Math.PI

new xxx 객체 생성 될 때 (static x)

Scanner sc = new Scanner(System.in);

<지역>

메소드가 불릴 때.

method1();

예시

public class A {
  int 전역변수 = 10;
  static int 전역변수2 = 10;

  public static void main() {}

  static void B() {}
  
}
-----

public class C {

	public static void main(String[] args) {
    
   		A a;    ----------- 1번
        A a2 = new A() -----2번
     }
}

1번을 부를 때, A의 클래스 static인 전역변수2, B()의 메모리가 생성됨.
2번을 부를 때, 전역변수의 메모리가 생성됨.

메모리가 저장되는 위치

메모리가 저장되는 위치는 3구역이 있다.

  1. 메소드
  2. 힙
  3. 스택

여기서, 메소드 영역에 static이 저장된다. (GC는 메소드 영역 삭제 X, 힙은 삭제 O)
메소드나 if 문 등이 끝날 때 힙 영역에 생성된 메모리들은 삭제된다.

객체, 클래스, 메소드 사용법

어떤 언어를 사용하는데 가장 헷갈리는 것이 객체를 주고 받고 메소드를 사용하며 상호작용 하는 것이다. 강사님이 아주 좋은 예제를 들어 주셔서 연습 겸 정리하려 한다.

상황 : 방탈출 게임 만들기.
구조 : EscapeGame(메인)
Item - name, hasKey, check(Player player)
Player - name, hasKey, itemName, pickUpKey(String name), tryToOpenDoor(Room room)
Room - doorOpen, openDoor()


Player player = new player();
Item desk = new Item();
Item box = new Iemm();
Room room = new Room();
-> 선언을 해줌으로써 메모리 생성. 
-> 메인에서 플레이어 아이템 객체 생성.

desk.name = "desk";
box.name = "box";
-> 구분을 위한 이름 지정

Item 클래스에 들어있는 
void check(Player player) 
-> 플레이어 객체를 넘겨줌으로써 플레이어가 check를 수행할 수 있음.
-> 키가 있는지 없는지 확인. 메소드 안에 hasKey에 대한 if 문 수행.

desk.check(player);
box.check(player);
check(player) 메소드 안에 player.pickUpKey();
-> Item의 객체인 desk, box가 check 메소드 수행. player 객체를 넣어 player - item의 관계 맺음을 알 수 있음.

player.tryToOpenDoor(room);
tryToOpenDoor(room) 메소드 안에 room.openDoor(); 
-> room 객체를 넘겨줌으로, room 객체와 관계가 생기고, room의 메소드까지 연계할 수 있음.

이런 방식으로 객체, 메소드끼리 상호작용하며 프로그래밍 할 수 있다.

static

static이 붙으면 객체 선언을 하지 않아도 됨.
메모리에 먼저 등록. (main) -> 먼저 사용됨
static은 메소드 영역에 생성되고, 가비지 컬렉터가 도달하지 못하므로 남발하면 효율적이지 못함.

상속

자식이 부모인 척 하기 위함.
다형성
부모를 부르려면 super() 사용
final이 붙으면 상속 불가

profile
파랑입니다.

0개의 댓글