성장 일기/쌍용교육센터 / / 2022. 12. 15. 09:16

1215/클래스, 생성자

쌍용교육센터에서 공부한 내용을 정리하며 기록하는 글이고 주관적인 생각이 들어갈 수 있습니다.
잘못된 내용이나 피드백 및 생각 공유는 언제든 환영입니다.
댓글로 남겨주시면 확인 후 수정하겠습니다.

 

class(설계도) :

  • 참조형 데이터 형, 사용자 정의 데이터 형
  • 참조형(Reference type)
    • 값은 메모리의 힙에 생성, 그 시작 주소를 스텍에 저장하는 데이터 형
    • 크기를 알 수 없다.
    • new를 사용하여 생성하고 값을 저장
    • new : 객체 생성용 키워드, heap 생성
  • 사용자 정의 데이터 형
    • 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
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유