ch08 : 참조 자료형

목차

참조 자료형

  • new 키워드로 생성한 객체 (단, String은 리터럴변수로도 선언 가능)

  • 기본 자료형(byte, short, int, long, float, double, char, boolean) 제외한 모든 자료형

생성자

  • 기본 생성자 : 매개변수가 없는, 자동으로 만들어지는 생성자

    • 만약 개발자가 다른 생성자를 만들었을 경우, 기본 생성자는 따로 만들어주어야 함

  • 생성자는 여러 개 만들 수 있다.

    • 이유?

      클래스의 일부 필드만으로 객체를 생성/전달/반환해야 할 경우가 있다. 이때 클래스의 일부 필드만을 매개 변수로 받아서 객체를 생성하기 위해 여러 종류의 생성자를 만들 수 있다!

  • this란

    • 객체의 변수와 매개변수의 이름이 같을 때, 구분하기 위해서 사용함

DTO : 여러 자료형을 하나의 타입에 담아 전달하고자 할때 사용하는 클래스로, 데이터를 다른 서버로 전달하기 위해 사용함 VO : 데이터를 담아 두기 위한 클래스 참고

Static

Static 메소드

  • ex) public static void myMethod() { … };

  1. 객체를 생성하지 않고서도 메소드 호출 가능하다.

    (일반 메소드처럼 객체별로 생성되는 게 아닌, 클래스 단위로 하나 생성되기 때문)

  2. 클래스 변수(static 변수)만 사용 가능하다.

Static 블록

  • ex) static { … } // 클래스 내부에서

  • 클래스의 객체가 생성되면서 딱 한번만 사용할 코드일 경우, static 블록 사용

Pass by Value VS Pass by Reference

매개 변수를 넘겨준 상황에서, 메소드 내부에서 해당 변수 값을 변경하게 되면

  • Pass by Value : 원본 값이 변경 되지 않는다.

  • Pass by Reference : 원본 값이 변경된다.

Pass by Value

  • 값을 넘겨주는 호출 방식이다.

  • 기본 자료형은 Call-By-Value이다.

    public class Test {
    
        public static void passByValue(int a) {
            a = 20;
    				System.out.println(a); // 20
            }
    
        public static void main(String[] args) {
            int a = 10;
    
            System.out.println(a); // 10
            passByValue(a);
    				System.out.println(a); // 10
        }
    }

Pass by Reference

  • 참조에 의한 호출 방식

  • 참조 자료형은 Pass by Reference이다.

  • 주소 값으로 참조가 가능하여, 주소 값이 가리키는 객체의 내용을 변경할 수 있다.

    public class ReferencePass{
    
        public static void passByReference(MemberDto member) {
    				member.name = "Change"
    				System.out.println(member.name); // "Change"
        }
    
        public static void main(String[] args) {
            MemberDto member = new MemberDto("Original");
    
    				System.out.println(member.name); // "Original"
            passByReference(member.name); // 함수 안에서 참조해서 데이터 변경할 경우, 외부에서도 반영됨
    				System.out.println(member.name); // "Change"
        }
    }

매개변수가 갯수가 정해지지 않았다면

  • 타입…변수명을 매개변수로 넘겨줌

  • ex) pubilc void atrbitrary(String message, int... numbers)

  • 하나의 메소드에서 한번만, 그리고 가장 마지막에만 선언해야함

Last updated