클래스의 구조

필드, 행위

public class 클래스명 {

필드
( 필드부의 접근제한자는 private 로 지정해주는것이 객체지향설계원칙 중의 하나이다. 캡슐화 )

생성자
생성자란, new로 새로운 객체가 생성될때 자동으로 실행되는 함수로써 
( 함수의 이름이 클래스 명과 일치해야한다 )
객체를 초기화할 때 편하다.

setter , getter
필드 변수가 private 이기 때문에 getter 와 setter 로 접근해야한다.

사용자 정의 함수
public String information(){
	return "객체정보";
}

}

필드 변수만 개발자가 작성해두면 이클립스 단축키 (Alt + Shift + S ) 로 생성자, 매개변수를 필요로 하는 생성자, setter ,getter 를 자동으로 만들어줍니다.

생성자의 호출 시점

main(){
	Car c = new Car()  //  바로 여기가 생성자가 호출되는 곳
}

/*
Car() >> 기본생성자 호출
Car(매개변수1, 매개변수2 ... ) >> 매개변수를 필요로 하는 생성자 호출
해당 인스턴스의 필드변수의 값을 매개변수로 저장하게 됨.

*/

/* 생성자를 이용한 초기화와 설정자를 이용한 초기화는 각각의 장단점이 존재한다.
   * 
   * 1. 생성자를 이용한 초기화
   * 장점 : setter 메소드를 여러 번 호출해서 사용하지 않고 단 한번의 호출로 
인스턴스를 생성 및 초기화 할 수 있다.
   * 단점 : 필드를 초기화할 매개변수의 갯수를 경우의 수 별로 모두 만들어둬야 한다.
   *      호출 시 인자가 많아지는 경우 어떠한 값이 어떤 필드를 의미하는지 한 눈으로 보기 힘들다.
   *      예) 아이디, 비밀번호, 이름이 모두 ohgiraffers인 경우
   *          new User("ohgiraffers", "ohgiraffers", "ohgiraffers"); 
몇 번째 인자가 아이디인지 이름인지 알 수 없다.
   * 
   * 2. 설정자를 이용한 초기화
   * 장점 : 필드를 초기화하는 각각의 값들이 어떤 필드를 초기화하는지 명확하게 볼 수 있다.
   *      예) 아이디, 비밀번호, 이름이 모두 ohgiraffers인 경우
   *          User user = new User();
   *          user.setId("ohgiraffers");
   *          user.setPwd("ohgiraffers");
   *          user.setName("ohgiraffers");
   *         호출하는 코드만 봐도 어떤 값이 어떤 필드를 초기화하는 내용인지 쉽게 알 수 있다.
   * 단점 : 하나의 인스턴스를 생성할 때 한 번의 호출로 끝나지 않는다.      
   *  */

오버로딩 ( 상속과 관련이 없음 !!! )

생성자나 함수를 선언할 때 (사실 둘 다 함수긴 하지만) 매개변수의 개수, 타입, 순서를 다르게 작성하면 서로 다른 생성자나 함수로 인식하게 된다.

이것을 오버로딩 이라고 한다.

오버로딩의 사용 이유 매개변수의 종류별로 메소드 내용을 다르게 작성해야 하는 경우들이 종종 있다. 이 때, 동일한 기능의 메소드를 매개변수에 따라 다르게 이름을 정의하면 복잡하고 관리하기가 매우 어려울 것이다. 규모가 작은 프로그램의 경우는 정도가 덜 하지만, 규모가 거대해지면 메소드 또한 관리하기가 매우 어려워진다. 따라서 동일한 이름으로 다양한 종류의 매개변수에 따라 처리해야 하는 여러 메소드를 동일한 이름으로 관리하기 위해 사용하는 기술을 오버로딩이라고 한다.

+ Recent posts