쌍용교육센터에서 공부한 내용을 정리하며 기록하는 글이고 주관적인 생각이 들어갈 수 있습니다.
잘못된 내용이나 피드백 및 생각 공유는 언제든 환영입니다.
댓글로 남겨주시면 확인 후 수정하겠습니다.
class(설계도) :
- 참조형 데이터 형, 사용자 정의 데이터 형
- 참조형(Reference type)
- 값은 메모리의 힙에 생성, 그 시작 주소를 스텍에 저장하는 데이터 형
- 크기를 알 수 없다.
- new를 사용하여 생성하고 값을 저장
- new : 객체 생성용 키워드, heap 생성
- 사용자 정의 데이터 형
- Java 언어에서 제공하는 데이터 형을 조합하여
새로운 이름의 데이터 형을 만드는 것 - 값 하나 저장은 자바에서 제공하는 데이터 형 사용
- 값 여러 개를 저장할 때는 자바에서 제공하는 데이터 형 사용 불가
- 사용자 정의 데이터 형을 객체화해 만든다.
- Java 언어에서 제공하는 데이터 형을 조합하여
클래스 문법)
접근지정자 클래스 클래스명 [extends 부모클래스명] [implements 구현인터페이스명]
클래스의 접근 지정자
- public : 외부 패키지에서 접근 가능
- package : 접근 지정자를 기술하지 않은 것, 같은 패키지 안에서만 접근 가능
- abstract : 추상 클래스를 만들 때
- final : 상속을 막는 클래스
- static : nested class로 만들 때
생성자(Constructor)
- 객체가 생성될 때 기본적으로 가지고 있어야할 값 또는 코드를 정의하는 곳
- method의 일종, 힙에 값 저장
- 객체화할 때에만 호출 가능(new로만 호출 가능)
- 상속되지 않는다.
- 클래스의 이름과 동일하게 만든다.
- 생성자 안에서 다른 생성자를 호출할 때 this나 super를 사용한다.
- 생성자는 Overload가 지원된다.
- 작성법
//접근지정자 클래스명(매개변수){
//객체가 생성될 때 기본적으로 가지고 있어야 할 값 설정
//}
class Test{
public Test(){ //개발자가 생성자를 하나도 정의하지 않으면
//compiler(javac)가 매개변수 없는 기본 생성자를 추가해준다.
//기본생성자(default constructor)
}
}
접근지정자
- public : 클래스 외부에서 객체 생성 가능
- protected : 같은 패키지의 다른 클래스에서 객체 생성 가능, 다른 패키지는 상속된 자식만 가능
- default : 같은 패키지의 다른 클래스에서 객체 생성 가능, 다른 패키지는 불가
- private : 클래스 안에서만 객체 생성 가능(singleton pattern을 도입)
Call By Value
- 값 복사
- method의 매개 변수가 기본형 데이터 형인 경우 arguments를 넣어주면
- 값이 복사되어 전달된다.
class Test{
public void swap(int i, int j){
int temp = i;
i = j;
j = temp;
System.out.println("swap method i : " + i +",j = "+ j);
}
public static void main(String[] args){
Test t = new Test();
int i = 12;
int j = 15;
System.out.println("swap 전 i : " + i + ", j = "+ j);
t.swap(i, j); //안에서만 값이 바뀜
System.out.println("swap 후 i : " + i + ", j = "+ j); //원래 변수 값 그대로
}
Call By Reference (자바에선 용어 없고 비슷한 동작)
- 주소 전달
- method의 매개 변수가 참조형 데이터 형인 경우 arguments를 넣어주면
- 주소가 그대로 전달된다. (컴퓨터에서 주소는 하나)
- 자바는 개발자가 주소를 사용할 수 없다.(c/c++은 포인트를 지원해 메모리 주소 사용 가능)
class Test{
private int i;
private int j;
public void swap(Test t){
int temp = 0;
temp = t.j;
t.i = t.j;
t.j = temp;
System.out.println("swap method i : " + t.i +",j = "+ t.j);//15,12
}
public static void main(String[] args){
Test t = new Test();
t.i = 12;
t.j = 15;
System.out.println("swap 전 i : " + t.i + ", j = "+ t.j);//12,15
t.swap(t); //주소가 전달
System.out.println("swap 후 i : " + t.i + ", j = "+ t.j); //15,12
}
this
- 객체의 주소로 변환되는 키워드
- method 형식, 키워드 형식으로 사용할 수 있다.
- 사용법
- instance 변수를 사용할 때 : this.변수명
- instance method를 호출할 때 : this.method명(값)
keword 형식
- 객체화 후 instance method안에 생략되어 있다.
- method를 호출하는 객체의 주소로 변환된다.
- method를 호출하는 객체의 instance 변수, instance method를 사용할 수 있다.
- static 영역에서는 사용할 수 없다. instance 영역에서만 사용 가능
method 형식
- 생성자 안에서 객체화 없이(new 없이) 클래스의 다른 생성자를 호출할 때 사용
- 생성자의 첫 번째 줄에서만 사용할 수 있다.
- 재귀호출이 되는 상황이 생기면 error가 발생
- super 자리에 this를 대신 사용한다.
- 사용법 : this(값,,, );
배우고 느낀점
생성자를 배웠고 생성자에서 this로 객체를 생성하지 않고
다른 생성자를 불러 올 수 있는 것과
call by value와 call by reference로
주소를 전달하면 값이 바뀌어서 오는 것과
값을 복사하는 방법을 배웠다.
아직 주소를 사용하는 법에 익숙하지 않지만
참조형에 대해 많이 익숙해지고 공부해야겠다.
'성장 일기 > 쌍용교육센터' 카테고리의 다른 글
1219/배열 (0) | 2022.12.19 |
---|---|
1216/String (0) | 2022.12.16 |
1214/메서드 (0) | 2022.12.14 |
1213/객체지향 (0) | 2022.12.12 |
1212/변수, 메서드 (0) | 2022.12.12 |