컴퓨터 & 코딩/Java

[혼공학습단 10기][혼공자] 객체 지향 프로그래밍

구로그 2023. 7. 5. 19:31
728x90
✏️ 객체 = 필드 (속성) + 메소드 (동작) 

메소드는 객체들 사이의 상호작용 수단이다.

클래스는 객체를 생성하기 위한 필드와 메소드가 정의되어 있는 객체의 설계도이다. 

클래스로부터 만들어진 객체를 해당 클래스의 인스턴스라고 한다 


 

✓ 객체 지향 프로그래밍 개발의 세 단계

① 클래스 설계

② 설계된 클래스를 가지고 사용할 객체를 생성(인스턴스화)

③ 생성된 객체를 이용

 


 

⇨ 클래스 생성

"클래스이름.java"로 파일을 생성 (클래스 이름과 대소문자가 같도록)

일반적으로 소스 파일당 하나의 클래스를 선언하지만 2개 이상의 클래스 선언도 가능하다.

(2개 이상의 클래스를 선언할 시에는 바이트 코드 파일(.class)이 클래스를 선언한 개수만큼 생성됨)

public class Car { 

}

 

 

⇨ 객체 생성

new 클래스();

// 클래스로 선언된 변수에 new 연산자가 리턴한 객체의 번지 저장 
클래스 변수 
변수 = new 클래스();

// 1개의 실행문에서 클래스 변수 선언과 객체 생성하기 
클래스 변수 = new 클래스();

new 연산자는 힙 영역에 객체를 생성시킨 후 객체의 번지를 리턴한다. 


✓ 클래스의 구성

public class ClassName {

    // 필드
    int fieldname;

    // 생성자
    ClassName() { ... }

    // 메소드
    void methodName() { ... }
    
}

📚 필드: 객체의 고유 데이터, 부품 객체, 상태 정보를 저장. 필드는 변수라 부르지 않음. 

✏️ 변수와 필드의 차이점 
변수: 생성자와 메소드 내에서만 사용. 생성자와 메소드가 실행 종료되면 자동 소멸
필드: 생성자와 메소드 전체에서 사용. 객체가 소멸되지 않는 한 객체와 함께 존재 

 

 

📚 생성자: 객체 생성 시 초기화를 담당. 필드를 초기화 하거나 메소드를 호출해서 객체를 사용할 준비를 한다.

(⚠︎ 메소드와 비슷해보이지만 클래스이름으로 되어있고 리턴 타입이 없다) 

 

- 생성자 오버로딩: 매개 변수를 달리하는 생성자를 여러 개 선언하는 것. new 연산자로 생성자를 호출할 때 제공되는 매개값의 타입과 수에 의해 호출될 생성자가 결정된다 

 

❗️ 필드 초기화 시 필드를 선언할 때 초기값을 주는 방법이 있고 생성자에서 초기값을 주는 방법이 있는데, 객체 생성 시접에 외부에서 제공되는 다양한 값들로 초기화되어야 한다면 생성자에서 초기화 되어야 한다. (생성자의 매개값으로 값들 받아옴) 
❗️ 필드의 이름과 매개 변수의 이름이 동일할 경우, 생성자 내부에서 필드 앞에 this. 를 붙여주면 필드와 같은 이름의 매개변수를 사용할 수 있다. 

 

 

📚 this() 

클래스 자신의 다른 생성자를 호출하는 코드. 생성자의 첫 줄에서만 허용된다. 

오버로딩에서 생기는 중복코드를 해결한다.

필드 초기화 내용을 한 생성자에 담고 나머지 생성자에서는 그걸 호출하는 방식이다

public class Car {
	String company = "현대자동차";
    String model;
    String color;
    int maxSpeed;
    
    Car() {
    }
    
    Car(String model) {
    	this(model, "은색", 250);
    }
    
    Car(String model, String color) {
    	this(model, color, 250);
    }
    
    Car(String model, String color, int maxSpeed) {
    	this.model = model;
        this.color = color;
        this.maxSpeed = maxSpeed;
    }
}

 

 

📚 메소드 (선언부(메소드 시그니처) + 실행 블록)

객체 간의 데이터를 전달하는 수단. 

 

 

📚 선언부 (리턴 타입 + 메소드 이름 + 매개 변수 선언)

- 리턴타입: 리턴 값이 없다면 void, 리턴값이 있다면 리턴값의 타입(예: double, int 등), 리턴값이 중요하지 않고 메소드 실행이 중요할 경우에는 변수를 선언하지 않고 메소드 호출도 가능하다

 

- 매개변수의 개수를 모를 경우

① 매개 변수를 배열 타입으로 선언

int sum1(int[] values) { }

② 배열을 생성하지 않고 값의 목록만 넘겨주기  (...)

int sum2(int ... values) { }

 

- 메소드 오버로딩 : 클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것. 단, ⚠︎ 매개 변수의 타입, 개수, 순서 중 하나가 달라야 함 

 

 

반응형