[자바의 신] 8장

ggam-nyang·2022년 9월 14일
0

자바의 신

목록 보기
1/1

8장. 참조 자료형

7장까지의 내용은 자바 및 프로그래밍 기초에 관한 것으로 따로 정리하지 않고 복기하자.

  • 추가로 책을 옮기고자 하는 것이 아닌, 복기 + Why 위주로 글을 적어보자!

참조 자료형 (Reference Type)

자바의 기본 자료형(primitive type) 8가지를 제외한 모든 자료형이다.
new를 사용해 객체를 생성하는 것들이다. (String 제외)

생성자

public class ReferenceType {
	public ReferneceType(String name){
    
    }
}

클래스명과 동일하게 작성된 메소드가 생성자이다.
위와 같이 생성자를 한개도 정의하지 않으면, 매개변수가 없는 기본 생성자가 생긴다.

생성자는 매개변수 타입과 개수에 따라 여러 개 작성할 수 있다.

WHY 생성자는 왜 필요할까?
자바의 생성자는 객체(인스턴스)를 생성하기 위해 필요하다.
우리가 필요한건 클래스가 아니라 객체니까 말이다.

public class User {
	public String name;
    public Int age;
    public String address;
    ...
    
    
    public User(String name) {
    	this.name = name;
    }
    
    public User(String name, Int age, String address) {
    	this.name = name;
        this.age = age;
        this.address = address;
    }
    
}

User 클래스가 여러가지 인스턴스 변수를 가질 때 생성자를 통해 편하게 다룰 수 있다. 매개변수로 name만 전달하거나, 모든 정보를 전달하여 생성자를 정의할 수 있고
DTO로 사용할 때 편리하다.

this 예약어는 스킵!

메소드 overloading

public class Overload {
	...
    public void someMethod(String str)
    public void someMethod(Int int)
}

메소드의 이름은 동일하게 하고 매개 변수들을 다양하게 변화시켜 작성할 수 있다.
오버로딩은 확장의 개념으로 이해할 수 있다.

즉, 같은 역할(행동)을 하는 메소드는 같은 메소드 이름을 가지게 한다.
매개 변수의 타입, 개수는 다르더라도 말이다.

Static 메소드

public class Static {
	...
    public static void staticMethod() {
    	... 
    }
}
// 이렇게 하지 않아도 된다.
Static staticTemp = new Static();
staticTemp.staticMethod()

// 이렇게 가능
Static.staticMethod()

static 메소드는 객체를 생성하지 않고도 메소드를 호출 할 수 있다.
그러나, 클래스 변수만 사용할 수 있다. (인스턴스 변수를 사용할 수 없다)

마찬가지로 static을 붙여 클래스 변수로 정의할 수 있는데,
모든 객체에서 하나의 값을 바라보기 때문에 사용에 주의해야 한다.

public class Static {
	static String name;
    public static void staticMethod() {
    	... 
    }
}

// Static 객체가 2개라고 하면
static1.name // "normal"
static1.name = "changed"
static2.name // "changed"

static block

static 블록은 객체가 생성되기 전 한번만 호출되고, 그 이후에는 호출하지 못한다.
static { }

pass by value, pass by reference

기본 자료형은 pass by value
참조 자료형은 pass by reference

메소드의 매개 변수로 참조 자료형을 사용한다면, 메소드 안에서 객체의 상태 변경 사항이 매개 변수로 사용된 객체에 반영된다.
당연히 주소값을 넘겼으니, 같은 주소값을 참조하는 객체(변수)도 값이 변화한다!





피드백: 공부 기록을 남기고, 복기는 좋다. 그러나 복기 대비 시간 소요가 너무 크다.

중요한 내용만 빠르게 정리하거나, 난이도 있게 추가 학습한 것만 정리하는게 나을지도?

profile
개발 꿈나무

0개의 댓글