JAVA - 06

월요일좋아·2022년 9월 22일
0

JAVA

목록 보기
6/12

생성자

new 클래스();

  • new 연산자에 의해 호출되어 객체의 초기화 담당
  • 클래스를 기반으로 객체를 생성
  • 메소드와 동일(자동 호출됨)
  • 필드의 값 설정
  • 메소드 호출해 객체를 사용할 수 있도록 준비하는 역할 수행
  • 생선자는 반환타입이 없음. (반환타입이 있으면 메소드)
  • 생성자는 new 키워드가 객체 생성시에만 실행

기본 생성자

  • 모든 클래스는 생성자가 반드시 존재하며 하나 이상 가질 수 있음
  • 생성자 선언을 생략하면 컴파일러는 다음과 같은 기본 생성자 추가
    public class Car() {} ----> public Car(){} : 자동추가

생성자 선언

  • 디폴트 생성자 대신 개발자가 직접 선언
    클래스(매개변수 선언, ...) { // 객체의 초기화 코드 }
  • 개발자가 선언한 생성자 존재 시 컴파일러는 기본 생성자 추가하지 않음

생성자 오버로딩(Overloading)

오버로딩 : 동일한 이름의 생성자를 여러 개 선언하는 것.

  • 매개변수의 타입, 개수, 순서가 다른 생성자 여러 개 선언
    (똑같은 형태로는 안됨)

다른 생성자 호출( this() )

  • this는 객체 자기 자신을 의미, ()는 메소드를 의미, this() : 자기자신의 메소드 = 자기자신의 생성자를 호출
  • 생성자 오버로딩되면 생성자 간의 중복된 코드 발생
  • 초기화 내용이 비슷한 생성자들에서 이러한 현상을 많이 볼 수 있음
    • 초기화 내용을 한 생성자에 몰아 작성
    • 다른 생성자는 초기화 내용을 작성한 생성자를 this(...)로 호출

메소드

  • 메소드는 C/C++의 함수와 동일
  • 자바의 모든 메소드는 반드시 클래스 안에 있어야 함(캡슐화 원칙)

메소드 오버로딩

  • 클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것
  • 하나의 메소드 이름으로 다양한 매개값 받기 위해 메소드 오버로딩
  • 오버로딩의 조건 : 매개변수의 타입, 개수, 순서가 달라야
    (보통은 개수를 다르게 해서 많이 사용)
  • 리턴 타입은 오버로딩과 관련 없음

메소드 오버로딩을 사용하는 이유

  • 비슷한 기능을 제공하는 메서드를 여러 개 생성 시, 각각 다른 이름을 제공하는 것보다 동일한 이름을 사용하는 것이 사용자가 사용하기 편리하기 때문

인스턴스 멤버와 this

인스턴스 멤버란?

  • 객체(인스턴스)마다 가지고 있는 필드와 메소드
    • 이들을 각각 인스턴스 필드, 인스턴스 메소드라고 부름
  • 인스턴스 멤버는 객체 소속된 멤버이기 때문에 객체가 없이 사용 불가

this

  • 객체(인스턴스) 자신의 참조(번지)를 가지고 있는 키워드
  • 객체 내부에서 인스턴스 멤버임을 명확히 하기 위해 this.멤버 사용
  • 매개변수와 필드명이 동일할 때 인스턴스 필드임을 명확히 하기 위해 사용
  • 객체 내에서는 this 키워드 생략가능,
    매개변수 or 지역변수와 이름이 같은 멤버가 있을 경우, 멤버 호출 시 this를 반드시 사용해야함
  • 📌생성자 코드의 제일 처음에 있어야 함

객체 배열

자바의 객체 배열 만들기 3단계

  1. 배열 레퍼런스 변수 선언
  2. 레퍼런스 배열 생성
  3. 배열의 각 원소 객체 생성
Circle c [];	//1. Circle 배열에 대한 레퍼런스 변수 c 선언
c = new Circle[5];	// 2. 레퍼런스 배열 생성 (실제 객체 생성 X, 배열만 생성된 것)
// Circle c [] = new Circle[5]; // 1번 + 2번 한줄로 표현

for(int i = 0; i<c.length; i++) {	// c.length는 배열 c의 크기로서 5
c[i] = new Circle(i); //3. 이 떄, 각 원소 객체 생성됨
}

0개의 댓글