JAVA

[ java ] 객체지향 프로그래밍(클래스, 생성자, 메서드, 필드)

Adose 2024. 12. 5. 16:42

📌 객체지향 프로그래밍(OOP)

❓객체지향 프로그래밍 (Object-Oriented Programming, OOP)


    • 물리적으로 존재하거나, 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있으면서 식별이 가능한 것
      • 물리적 : 자동차, 사람
      • 추상적 : 학과, 강의
    • 객체는 속성(field) + 동작(method)으로 구성되어져 있다.객체란 ?
    • Ex 학과(객체) = field
      • 속성 : 강의, 담당 교수
      • 동작 : 강의 평가, 학생 등록
    • Ex 사람(객체) = method
      • 속성 : 이름, 나이
      • 동작 : 웃다, 울다
  • 객체지향 프로그래밍은 이러한 객체를 하나씩 조립해서 완성된 프로그램을 만드는 기법이라고 생각하면 된다.

 

 

📌 객체 간의 관계

❓객체는 개별적으로 사용이 가능하지만, 대부분 다른 객체와 상호작용을 한다.


1️⃣ 집합(aggregation)관계

  • 하나의 객체에 여러 개의 독립적인 객체들이 구성되는 관계이다.
  • 예를들어 자동차는 엔진, 타이어, 핸들등으로 구성 된다
  • 이때 이 부품(엔진, 타이어 핸들)들은 집합 관계라고 볼 수 있다.
  • 집합 관계의 객체는 서로 독립적으로 존재할 수 있다. (Ex. 타이어가 없어도 자동차는 존재할 수 있다)

  ❗합성(Composition) 관계

  • 더 강한 집합 관계로, 객체에 강하게 의존한다.
  • Ex. 사람이 죽으면 심장은 없어진다.

2️⃣ 연관(=사용, association)관계

  • 객체가 다른 객체를 지속적으로 사용하거나 참조하는 경우를 말한다.(= 객체 간의 상호작용을 말함)
    • 객체는 다른 객체의 메서드를 호출할 수 있다.
  • Ex. 사람은 자동차를 사용한다. (연관관계)
    • 사람을 자동차를 사용할때, 자동차의 달린다(동작, method)를 사용할 수 있다
class Person {
    Car car;  // 자동차 참조
    void drive() {
        car.stop();  // 자동차의 멈춤 기능 호출
    }
}

 

❗의존(Dependency) 관계

  • 객체가 다른 객체를 일시적이고 필요한 순간에만 의존하는 관계를 말한다.
class Person {
    void stopCar(Car car) {  // 특정 조건에서만 Car 사용
        car.stop();
    }
}

🌟 연관 관계는 지속적인 사용을 위해 필드에 저장하고, 의존 관계는 필요할 때만 생성하여 사용한다.


 

 

3️⃣ 상속관계(inheritance)

  • 상위 객체를 기반으로 하위 객체를 생성하는 관계이다
    • 간단히 말하면 한 클래스가 다른 클래스의 필드와 동작을 물려 받는 것이다.
    • 상위 객체 : 종류
    • 하위 객체 : 구체적인 사물
    • Ex. 자동차(하위 객체)는 기계(상위 객체)의 한 종류이다.

 

 

📌 클래스


  • 객체를 만들기 위한 틀이다.
  • 클래스는 2가지로 구성되어져 있다.
  • 캡슐화가 가능하다.
    • 필드
    • 메소드

❗ 캡슐화란 ?

  • 객체와 속성을 하나의 단위로 묶고, 외부로부터의 접근을 제한 할 수 있도록 한다.
  • 접근 제한자(=제어자) : public, private 등
Public class 클래스명{
	타입 필드명;

	public 클래스명(매개변수 목록){
	...}
	public 리턴타입 메소드명(매개변수목록){
	...}
}
public class Person{
	String name= "dose" //필드
	
	public String getAge(){ //메서드 
	return this.name;
	}
}

Person k1 = new Person(); //생성자

 

 

📌 생성자


1️⃣ 기본 생성자

  • 매개변수 없는 생성자
  • 클래스에 생성자를 명시하지 않으면, 컴파일러가 파라미터가 없는 기본 생성자를 자동 생성한다.
public class Car {
    // 디폴트 생성자가 자동 추가됨
}

Car c1 = new Car(); 

 

2️⃣ 사용자 정의 생성자

  • new 연산자 뒤는 생성자 호출
public class 클래스명(ex.Car){
	String model;
	
	//생성자
	public Car(String model) {
	this.model = model; // 객체 초기화
	}

} //==> 클래스 블록 

Car c1 = new Car("T");

//생성자를 이용하여 메모리에 객체를 만든다.
//메모리에 만들어진 객체를 인스턴스라고 말할 수 있다.  
//만들어진 객체를 **참조하는 변수가 c1**이다. 

 

 

❗ 기본생성자, 사용자 정의 생성자

public class 클래스명(ex.Car){
	String model;
	
	public Car(){
	
	}
	
	public Car(String model) {
	this.model = model; // 객체 초기화
	}
}

//	둘다 가능 (= **생성자 오버로딩**) 
	
	Car c1 = new Car("T");
	Car c1 = new Car();
	// 기본생성자는 필드의 값이 null이 될 수 있다. 

 

 

📌 필드


  • 클래스로부터 객체가 생성될 때 필드는 기본 초기값으로 자동 설정된다.
  • 다른 값으로 초기화 하는경우

❗ 참고 코드

public class Person{
//필드
	String name = "jj"; //필드 
	int age;

//생성자
	public korean(String age){ 
		this.age = age ;
}

 

 

📌 메소드


  • 입력값을 받고 연산을 한 후 결과값을 도출해낸다.
  • 입력값 : 매개변수(Parameter), 인자(Argument)
    • 인자 (Argument) : 어떤 함수를 호출 시 전달되는 을 의미한다.
    • 매개변수(Parameter) : 전달된 인자를 받아들이는 변수를 의미한다.
public class Person{
	String name= "dose" //필드
	int age = 1; 
	
	public int ageCalculage(int age){ //메서드 //age: 매개변수 
		return age - this.age; 
	}
}

Person person = new Person();
int result = person.ageCalculate(5);  //5 : 인자