차곡차곡 성 쌓기
article thumbnail

생성자

생성자의 특징

    • 메소드이다.  
    • 객체당 한 번 호출된다.
    • 리턴타입을 지정할 수 없다  
    • 목적은 객체의 초기화이다. 생성자는 객체가 생성될 때 반드시 호출된다.  
    • 개발자가 생성자를 생성하지 않았다면 컴파일러가 자동으로 기본 생성자 삽입한다.

 

기본 생성자

매개 변수 없고 아무 작업 없이 단순 리턴하는 생성자

  • 컴파일러가 만든다
  • 하지만 개발자가 클래스 생성자를 하나라도 작성한 경우 컴파일로는 기본 생성자를 만들지 않는다.

 

this 레퍼런스

▶︎ this

  • 객체 자신에 대한 레퍼런스

▶︎ this()

  • 클래스 내의 다른 생성자 호출
  • 생성자 내에서만 사용가능
  • 반드시 생성자 코드의 제일 처음에 수행
public class Book{
    String title;
    String author;

    public Book(){
        this("", "") // 같은 클래스내에 다른 생성자를 호출
    }

    public Book(String title){
        this(title, "작자미상");
    }

    public Book(String title, String author){
        this.title = title; this.author = author;
    }

    public static void main(String [] args){
        Book littlePrince = new Book("어린왕자", "생택쥐페리");
        Book loveStory = new Book("춘향전");
    }
}

 

객체 배열

명품 JAVA Programming - 황기태

1 Circle [] c; // 레퍼런스 변수 c 선언
2 c = new Circle[5]; // 레퍼런스 배열 생성

3 for(int i=0; i<5; i++){
        c[i] = new Circle(i); // 배열의 각 원소 객체 생성
 }
  • 2 : 레퍼런스 배열이 생성된다. 주소값을 저장하기위한 5개의 메모리 공간이 할당된다.
  • 3 : 각 원소의 객체가 생성된다.

 

메소드 형식

▶︎ 메소드

  • 클래스의 멤버 함수
  • 자바의 모든 메소드는 반드시 클래스 안에 있어야 한다. (캡슐화 원칙)

▶︎ 메소드 구성 형식

  • 접근 지정자 : public, private, protected, 디폴트 (접근 지정자 생략된 경우)
  • 리턴 타입

 

인자 전달

경우 1. 기본 타입의 값 전달

  • 값이 복사되어 전달 (call by value)
  • 값이 별개로 취급됨

경우 2. 객체 혹은 배열 전달

명품 JAVA Programming - 황기태

  • 객체나 배열의 레퍼런스만 전달
  • 객체나 배열을 공유하게 됨

 

메소드 오버로딩(Overloading)

오버로딩
이름이 같은 메소드 작성할 수 있다.

 

▶︎ 오버 로딩 조건

  • 매개변수의 개수가 다르다
  • 매개변수의 타입이 다르다.
  • 함수의 이름이 동일하다.
public class MethodSample{
    // 오버로딩 성공
    public int getSum(int i, int j){
        return i+j;
    }

    // 오버로딩 성공
    public int getSum(int i, int j, int k){
        return i+j+k;
    }

    // 오버로딩 성공
    public int getSum(double i, double j){
        return i+j;
    }
}

리턴 타입은 오버로딩과 관련 없음

  • 리턴타입만 다르면 오버로딩 샐패
  • 컴파일이 구분 못함 -> 공존 불가

 

객체 소멸과 가비지 컬렉션

▶︎ 객체 소멸

  • new에 의해 할당된 객체 메모리르 자바 가상 기계의 가용 메모리로 되돌려 주는 행위

자바 응용 프로그램에서 임의 객체 소멸할 수 없음

  • 객체 소멸은 JVM의 고유한 역할

▶︎ 가비지

  • 가리키는 레퍼런스가 하나도 없는 객체
  • 모든 객체 안에 reference count 변수가 있다. 복사할 때 count 증가

▶︎ 가비지 컬렉션

  • 가비지 컬렉터가 자동으로 가비지 수집 반환

 

접근 지정자

▶︎ 목적

  • 멤버 보호

▶︎ 클래스 접근지정

public class Word{} // public class
class Local{} // 디폴트 클래스
  • 다른 클래스에서 사용하도록 허용할지 지정
  • public 클래스
    • 다른 모든 클래스에게 접근 허용
  • 디폴트 클래스
    • Package-private
    • 같은 패키지의 클래스에만 접근 허용

▶︎ 멤버 접근 지정

  • public : 누구든지 접근 가능 (다른 패키지도 가능)
  • private : 본인 클래스가 아니면 접근 불가 (같은 패키지도 불가)
  • 디폴트 : 같은 패키지에 있는 다른 클래스에서 접근 가능
  • protected : 같은 패키지 + 다른 패키지라도 상속받으면 가능
728x90
profile

차곡차곡 성 쌓기

@nagrang

포스팅이 좋았다면 "좋아요" 해주세요!