[ 클래스란? ]

: 객체를 만드는 설계도 역할.

[ 클래스의 규칙 ]

  1. 하나 이상의 문자로 이루어져야 함.
  2. 첫 번째 글자는 숫자 불가.
  3. '$', '_' 외의 특수문자는 사용불가.
  4. int, public, for 등 자바 키워드는 사용불가.
  • 클래스의 첫 글자는 대문자로 하는 것이 관례.

선언 방법 ex) public class Ourtodaysclass {

  • 두 개 이상의 클래스 선언도 가능. 그러나, 파일 이름과 동일한 이름의 클래스만 선언 가능.

[ 클래스 참조방법 ]

: 다른 클래스의 객체를 참조 시, 아래와 같이 객체 생성.

public class StudentExample {
	public static void main(String[] args) {
    	Student s1 = new Student();

[ 클래스의 용도 ]

: 클래스의 용도는 "라이브러리(API)"와 "실행" 크게 두 가지로 나뉨. 주로 100개의 클래스 중 99개가 라이브러리이고, 1개가 실행 클래스.

[ 클래스의 구성멤버 ]

  • 필드 : 객체의 데이터가 저장되는 곳. 선언 형태는 변수와 비슷하나 생성자와 메소드 내에서만 사용되고 메소드가 실행 종료되면 자동 소멸되는 변수와 달리, 객체와 함께 계속 존재. 기본타입과 참조타입이 모두 올 수 있음.
    ex) int fieldName;

  • 생성자 : 객체 생성 시 초기화 역할을 담당. new 연산자로 호출되는 특별한 중괄호 {} 블록. 메소드와 비슷하게 생겼지만 클래스 이름으로 되어 있고 리턴 타입이 없음.
    ex) ClassName() { }

  • 메소드 : 객체의 동작에 해당하는 실행 블록. 메소드 호출 시, 중괄호 블록 내 모든 코드들이 일괄적으로 실행. 외부로부터 매개값을 받을 수도, 실행 후 값을 리턴할 수도 있음.
    ex) void methodName() { }

[ 필드 ]

  • 필드의 선언 : 클래스 중괄호 {} 블록 어디서든 존재할 수 있음. 그러나, 생성자와 메소드 중괄호 블록 내부에는 선언될 수 없음. 필드에 저장할 타입으로 기본타입과 참조타입 모두 가능.

  • 필드의 사용 : 생성자와 메소드가 필드의 값을 변경 가능. 타 클래스에서 객체를 생성하여 변경도 가능. 객체 생성하여 변경 시 아래와 같이 도트 사용해서 변경.

A Class : 	int speed;

B Class :	void method() {
			Car myCar = new Car();
			myCar.speed = 60;

[ 생성자 ]

  • 초기화 : 생성자는 new 연산자와 같이 사용되어 객체의 초기화를 담당.

  • 모든 클래스는 생성자가 반드시 존재하며, 하나 이상 가질 수 있음. 생성자 선언을 생략했다면, 중괄호 {} 블록이 비어있는 기본 생성자를 코드에 자동 추가.

  • 생성자는 메소드와 비슷한 모양을 가지고 있으나, 리턴 타입이 없고 클래스 이름과 동일.

  • 생성자 선언 : 매개변수 선언은 생략해도 되고, 여러개 선언도 가능. 그러나, 매개변수 선언했으면 호출할 때 기본 생성자만은 호출 불가하고, 변수들도 호출해야 함.

public class Car {
	Car(String model, String color, int maxSpeed) {}

Car myCar = new Car("그랜저", "검정", 300);
  • 필드 초기화 : 다양한 값들로 초기화되어야 하는 경우라면 아래처럼 매개값으로 초기화.
	//필드
    String nation = "대한민국";
    String name;
    String ssn;
    
    //생성자
    public Korean(String n, String s) {
    name = n;
    ssn = s;
    }
  • 위 예시와 다르게 필드와 동일한 이름을 갖는 매개변수를 사용하는 것이 관례. 그러나, 이름이 동일하면 매개변수가 우선 순위라, 생성자 내부에서 해당 필드에 접근할 수 없음. 이럴 때, this.를 붙임.
public Korean(String name, String ssn) {
	this.name = name;
    this.ssn = ssn;
}
  • 오버로딩 : 하나의 클래스 안에서 같은 이름의 메소드나 매개변수를 달리하는 생성자를 여러 개 선언하는 것.
public class Car {
	Car() {}
    Car(String model) {}
    Car(String model, String color) {}
    Car(String model, String color, int maxSpeed) {}
}
  • 메소드 '오버라이딩' : 부모가 가지고 있는 메소드를 자식이 가지고 있는 것. 메소드 재정의. @Override가 첨부됨.

오버로딩 : 기존에 없던 메소드를 새로 정의.
오버라이딩 : 상속받은 메소드의 내용만 재정의.

  • 구분		 오버로딩  오버라이딩
  • 메소드 이름 : 동일 / 동일
  • 매개변수,타입 : 다름 / 동일
  • 리턴타입 : 상관없음 / 동일
  • 다른 생성자 호출 (this)
    : 오버로딩 많아질 경우, 중복된 코드 발생할 때 사용. 매개변수 수만 다르게 하고 필드 초기화 내용이 비슷한 생성자일 때 주로 사용. 중복 코드 발생 시 마지막 생성자만 호출하도록 수정하면 됨.

[ 메소드 ]

  • 메소드 : 객체의 동작에 해당되는 중괄호 {} 블록. 호출 시 중괄호 블록 내 모든 코드들이 일괄적으로 실행. 외부로 부터 매개값을 받을 수도, 실행 후 어떤 값을 리턴할 수도 있음.

  • 메소드 선언 : 선언부(리턴타입, 메소드이름, 매개변수선언)와 실행 중괄호 블록으로 구성.

  • 리턴타입 : 메소드가 실행 후 리턴하는 값의 타입. 메소드는 리턴값이 있을 수도 없을 수도 있음. 그러나, 메소드 실행 후, 결과를 호출한 곳에 넘겨줄 경우에는 리턴값이 필요.

    ex) powerOn () : 전원만 켜면 끝. (리턴 필요x)
    	divide () : 나눗셈 결과를 나타내야함. (리턴 필요o)
  • 리턴값의 유무에 따라 호출 방법이 다름

	ec) 리턴값 x : powerOn();
    	리턴값 o : double result = divide(10, 20);
  • 리턴값이 없는 메소드는 리턴 타입에 void가 와야하고, 리턴값 있는 메소드는 리턴값의 타입이 와야함.

  • 메소드 이름 : 관례적으로 소문자로 작성. 혼합된 이름이면 뒤에 오는 단어 첫글자는 대문자.

  • 매개변수 선언 : powerOn () 메소드는 전원만 켜면 끝이지만, divide () 메소드는 나눗셈할 수가 필요하기에 매개변수 선언해야 함.

  • 매개변수의 수를 모를 경우 :
    ex) int sum (int[] value) {}
    or
    int sum (int ... value) {}
    (...으로 대체 사용 가능)

  • 리턴(return)문 : 메소드를 종료한다는 뜻. 메소드 선언에 리턴값이 있는 메소드는 반드시 리턴문을 사용해서 리턴값을 지정해야 함. 리턴문이 없다면 컴파일 오류. 리턴문 이후 실행문이 오면 "Unreachable code"로 오류 발생. 뒤에 실행문이 추가적으로 있으면 break; 사용.

  • 리턴값이 없는 메소드는 리턴타입 자리에 void 사용.

  • 호출법 : 클래스.메소드 = new 클래스 ();

  • 메소드 오버로딩 : 클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것.

  • 메소드 오버로딩 조건 : 매개변수의 타입, 개수, 순서 중 하나가 달라야 함.

  • 인스턴스 멤버와 this : 생성자와 매개변수 이름이 필드와 동일한 경우, 인스턴스 멤버인 필드임을 가리킬 때 사용.

[import문]

  • 다른 패키지에 속하는 클래스를 사용하려면 패키지 이름과 클래스 이름을 모두 기술하여 new로 생성해야 하는데, 편하게 하기 위해 import문을 사용.

  • 작성 위치 : 패키지 선언과 클래스 선언 사이.

  • 패키지에 포함된 다수 클래스 사용 시, 클래스 이름 생략하고 을 사용. 은 패키지에 속하는 모든 클래스들을 의미.

  • 하위 패키지는 import 대상이 아니기에, 아래와 같이 하위패키지도 import문을 작성해야 함.
    ex) import com.mycompany.;
    import com.mycompany.project.
    ;

  • 예외 : 다른 패키지에 동일한 클래스 이름 존재 시, import 작성 시, 컴파일 오류 발생. 이 때는 패키지 이름 전체를 기술해야 함.

profile
FrontofFrontEnd

0개의 댓글