📌 객체지향 프로그래밍(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 : 인자
'JAVA' 카테고리의 다른 글
[ java ] 객체 상속 (0) | 2024.12.10 |
---|---|
[ java ] 메서드의 매개변수로 Object? (Object - toString()) (0) | 2024.12.10 |
[ java ] Random, Math.Random (0) | 2024.12.05 |
[ java ] 배열 (복사, 비교) , 2차원배열 개념 (0) | 2024.12.04 |
[ java ] String 클래스(문자열 분리, 비교) (0) | 2024.12.04 |