개발일지

필드, 메서드, 생성자 본문

Java/Java 개념 설명

필드, 메서드, 생성자

딸기아사이레모네이드리프레셔 2024. 2. 20. 17:44
728x90

목차

    💡 필드와 지역변수 구분하기


    1️⃣ 필드와 지역 변수의 구분

    필드는 클래스에 포함된 변수로 객체의 속성값을 지정할 수 있다. 필드는 지역변수와 구분해야 한다. 

    클래스의 중괄호 안에 선언된 변수를 필드,  메서드의 중괄호 안에 선언된 변수를 지역 변수라고 생각하면 된다.

    필드는 힙 메모리의 객체 내부, 지역 변수는 스택 메모리에 생성된다. 

    스택 메모리에 저장되는 변수는 때가 되면 자바 가상 머신이 자동으로 삭제하지만, 힙 메모리의 객체 안에 저장되는 필드는 객체가 사라지지 않는 절대로 삭제 되지 않는다. 

     

    2️⃣ 필드와 지역 변수의 초깃값

     

    필드는 직접 초기화하지 않아도 강제로 초기화가 되지만, 지역변수는 직접 초기화하지 않으면 저장공간이 빈 공간 그대로 있어 값을 출력하고자 할 때 오류가 발생한다. 

     

    힙 메모리에는 빈 공간이 저장될 수 없기 때문에, 힙 메모리에 위치하는 필드는 강제로 초기화되는 것이고, 스택 메모리는 강제로 초기화되지 않으므로 여기에 저장되는 지역 변수 또한 그 특징을 지니고 있다. 

     

     

      필드 지역변수
    저장 위치 힙 메모리 스택 메모리
    강제 초기화 직접 초기화하지 않아도 강제 초기화O 강제 초기화X

    💡메서드


    자바제어자 리턴(반환타입) 메서드명(입력매개변수) { 메서드 내용 }

    public static int sum(int a, int b){
        //메서드 내용
    }

    메서드 호출하기

    1️⃣ 클래스 외부에서 메서드 호출하기

    1. 클래스 외부에서 메서드를 사용하려면 먼저 객체를 생성해야 한다. 
    2. 리턴 타입이 void인 경우, 리턴되는 값이 없어 그대로 메서드에 호출만 하지만, 리턴값이 있는 메서드는 일반적으로 리턴되는 값을 저장할 수 있는 변수를 선언해야 한다. 

    2️⃣ 클래스 내부에서 메서드 호출하기

    클래스 내부에 있는 메서드끼리는 객체를 생성하지 않고 서로를 호출할 수 있다. 말 그대로 같은 멤버이기 때문이다. 

    다만, 메서드 앞에 static이 붙어 있을 때는 static이 붙은 필드 또는 메서드만 호출할 수 있다. 

     

    ⭐️ 기본 자료형 입력 매개 변수와 참조 자료형 입력 매개 변수의 차이

    참조 자료형이 입력 매개 변수로 넘겨질 때, 실제 객체가 전달되는 것이 아니라 객체의 위칫값이 전달된다는 것이다.

    기본 자료형이 입력 매개 변수로 넘겨질 때와 다른 동작을 수행한다.

     

    1️⃣ 기본 자료형이 입력 매개 변수로 전달될 때

    twice() 메서드는 단 한번도 main()함수의 a값을 건드린 적이 없기 때문에 a의 값은 여전히 3일 것이다. 심지어 twice() 메서드의 실행을 완료하고 main()함수로 돌아온 시점에는 메모리에서 twice() 프레임 자체가 날아간 이후이므로 twice() 메서드의 지역 변수 a는 메모리상에 존재하지도 않는다. 

    이렇게 기본 자료형을 입력매개변수로 전달하면 절달받은 메서드는 값을 복사해 사용한다.

     

    2️⃣ 참조 자료형이 입력 매개 변수로 전달될 때

    입력매개변수로 넘겨진 변수의 스택 메모리값이 복사돼 사용되는 것은 동일하지만, 참조 자료형은 스택 메모리에 객체의 참조값을 저장하고 있으므로 실제 객체가 아닌 객체의 참조값이 전달돼 복사된다. 그러다 보니 호출한 메서드와 호출된 메서드에서 모두 동일한 객체를 쳐다보고 있는 상황이 연출된다.

    그래서 호출된 메서드에서 객체의 값을 변경한 후 호출한 메서드로 돌아오면 값이 바뀌게 된다. 

    💡 생성자


     

    생성자는 객체를 생성하는 역할을 지닌 클래스의 내부 구성 요소이다. 

    생성자를 작성할 때 꼭 지켜야 하는 문법적 규칙은 2가지이다. 

    1. 반드시 클래스명과 동일한 이름으로 지어야 한다.

    2. 리턴타입이 없다. 

     

     

     

    728x90

    'Java > Java 개념 설명' 카테고리의 다른 글

    최상위 클래스 Object  (0) 2024.02.21
    Static 제어자  (0) 2024.02.20
    클래스와 객체의 개념  (0) 2024.02.20
    기본 자료형 VS 참조 자료형  (0) 2024.02.20
    JVM에 대해 알아보자  (0) 2023.04.10
    Comments