[JAVA]생성자,this,인스턴스와 객체,메서드,스태틱,메모리

신동혁·2022년 8월 12일
0

JAVA

목록 보기
9/16

1. 생성자

생성자는 클래스를 만들면 자동으로 생기는 것으로 클래스명과 동일하고 클래스를 만들 때 멤버변수나 상수를 초기화한다. 일반적으로는 'class명 () {}'다음과 같은 형식으로 생성되고 따로 멤버변수에 대한 디폴트값을 초기화하고 싶으면 'class명 () { 디폴트값설정 }' 이런식으로 생성자를 편집해주면 된다. 또한 생성자에 파라미터를 받고 싶으면 'class명 ( 파라미터설정 ) {}' 이런식으로 편집하면 된다.

2. this

클래스의 메서드를 작성할 때 this라는 명령어가 나올 때가 있는데 이는 클래스로 만들어진 인스턴스 스스로를 가리키는 예약어이다.
ex)

class A {
    String msg = "hi"
    A(String msg){
        this.msg = msg;
    }
}

A라는 클래스 안에 변수msg를 "hi"로 초기화했고, 생성자 메서드를 편집하여 파라미터msg를 받고 이를 클래스A 안 변수msg로 대입하는 것이다.
즉, this.msg 는 클래스A의 멤버변수msg를 의미하는 것이고
등호 뒤에 msg 는 생성자 메서드A의 파라미터msg를 의미하는 것이다.

3. 인스턴스와 메모리 동작

객체를 선언한다. 이는 클래스가 힙메모리에 생기는 것과 같고, 이런 객체에 이름을 짓고 초기화시키면 힙메모리에 있던 객체는 인스턴스라고 불리게 된다. 인스턴스명은 스택메모리에 저장되게 된다.

4. 메서드 구현

1) 선언 형태

데이터타입 메서드명 ( 파라미터 ) { 로직; + return }
: 데이터타입은 리턴타입(반환타입)을 의미.
파라미터(매개변수)에도 데이터타입을 적어줘야 한다. 파라미터가 필요없을 경우 비워나도 가능하다.
로직끝마다 세미콜론( ; ) 꼭 찍기.

2) 만약 리턴값이 없다면?

굳이 리턴값이 필요없다면 메서드명을 선언할 때 void라는 데이터타입을 이용한다.

3) 호출

먼저 메서드가 포함된 클래스를 이용해 객체를 선언한다.
==> 객체참조.메서드( value );
다음과 같이 호출한다.

5. Static

class안에서 변수를 선언한다면(메서드 안에서 선언하는 로컬변수 제외) 일반적으로 객체를 선언해주어야 class안에 있는 멤버변수를 이용할 수 있다. 하지만 static 을 통해 객체를 선언하지 않고도 멤버변수를 사용할 수도 있다.

1) 형태

class 클래스명{
   int 변수명1;
   static int 변수명2;
}
여기서 변수명1과 변수명2는 모두 멤버변수지만 변수명1은 객체생성이 되어야 힙메모리에 생기는 인스턴스변수고, 변수명2는 객체생성과 무관하게 먼저 생성이 되고 모든 인스턴스가 값을 공유하는 클래스변수다.

6. 메모리

1) 데이터

static으로 선언된 값이 저장된다.

2) 스택

로컬변수가 저장되고 휘발성이 특징이다.

3) 메모리

인스턴스가 저장된다.

profile
개발취준생

0개의 댓글