백엔드 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;    ----------- 1A a2 = new A() -----2}
}

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

메모리가 저장되는 위치

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

  1. 메소드
  2. 스택

여기서, 메소드 영역에 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개의 댓글