객체 지향 프로그래밍
– 메시지는 개체가 서로 협력하기 위해 사용할 수 있는 유일한 통신 수단입니다.
– 객체가 메시지를 수신할 수 있다면 메시지에 해당하는 책임을 다할 수 있음을 의미합니다.
– 물체의 외부와 내부는 당연히 분리되어 있습니다. 외부 물체는 메시지만 볼 수 있고 내부는 볼 수 없기 때문입니다.
– 독립된 객체의 상태와 동작에 대한 걱정 없이 시스템의 기능을 구현 개체가 다른 개체에 전달해야 하는 메시지에 대해 더 걱정그것을 추천합니다
– Responsibility-Driven Design의 기본 아이디어는 객체 간에 교환되는 메시지를 기반으로 적절한 역할, 책임 및 협업을 발견하는 것입니다.
– What/Who 주기는 어떤 행동(메시지)을 취할 것인지 결정하고, 누가 그 행동을 취할 것인지 생각하고, 어떤 메시지가 필요한지 결정한 다음 적절한 대상을 선택하는 것으로 구성됩니다. 즉, 받은 메시지가 개체의 책임을 결정합니다.
– 인터페이스는 사물이 만나는 경계점에서 서로 상호 작용할 수 있도록 연결하는 장치 또는 방법입니다. 예를 들어 인간 대 인간 인터페이스는 말, 몸짓, 손짓, 휴대폰이 될 수 있습니다.
– 생성자란?
Bar에서 생성자는 개체를 초기화하는 특별한 종류의 메서드입니다. 생성자는 클래스와 이름이 같고 반환 값이 없습니다. 개체가 생성될 때 자동으로 호출되며 개체의 인스턴스 변수를 초기화하고 다른 초기화 작업을 수행합니다.
생성자는 다음과 같은 특징이 있습니다.
- 생성자 이름은 클래스 이름과 동일합니다.
- 생성자는 반환 값이 없으며 유효하지 않은 것으로 선언되지 않습니다.
- 생성자는 객체가 생성될 때 자동으로 호출됩니다.
- 생성자는 오버로드될 수 있습니다.
- 생성자는 매개변수를 가질 수 있고 매개변수로 초기화 작업을 수행할 수 있습니다.
예를 들어 다음은 생성자를 사용하여 Person 클래스의 인스턴스 변수를 초기화하는 예입니다.
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
위의 코드에서 Person 클래스에는 Name과 Age라는 두 개의 인스턴스 변수가 있습니다. 생성자는 이름과 연령을 매개변수로 사용하고 개체의 인스턴스 변수를 초기화합니다. 이것이 객체를 생성할 때 초기화된 이름과 나이로 객체를 생성합니다.
-작업
작업은 개체 지향 프로그래밍에서 개체가 수행할 수 있는 작업입니다. Java에서 작업은 일반적으로 클래스 내의 메서드로 구현됩니다.
작업은 개체가 수행할 수 있는 작업을 추상화하여 개체의 동작을 정의합니다. 개체는 작업을 수행하는 다른 개체와 메시지를 주고 받습니다. 이러한 개체 간의 상호 작용은 개체 지향 프로그래밍에서 중요한 개념 중 하나입니다.
Java에서 클래스는 객체를 추상화하는 데 사용되며 객체의 작업은 메서드로 구현됩니다. 메서드는 클래스 내에서 정의되며 개체가 수행할 수 있는 작업을 정확하게 정의합니다. 메서드는 개체의 속성을 변경하고 다른 개체와 상호 작용하며 결과 값을 반환할 수 있습니다.
-커플링 정도
결합은 객체 지향 프로그래밍의 한 모듈이 다른 모듈에 의존하는 정도입니다. 즉, 한 모듈이 다른 모듈에 얼마나 강력하게 연결되어 있는지입니다. 결합도가 높다는 것은 모듈 간의 의존도가 높다는 것을 의미하며, 이는 유지 관리 및 확장성에 부정적인 영향을 미칠 수 있습니다.
Java에서 연관성을 줄이려면 다음을 사용할 수 있습니다.
- 추상화: 추상화는 구체적인 구현을 추상 개념으로 대체하는 것을 의미합니다. 추상화를 사용하면 모듈의 구현 세부 정보를 숨길 수 있으므로 다른 모듈에 대한 모듈 구현의 직접적인 종속성을 줄일 수 있습니다.
- 인터페이스: 인터페이스는 모듈이 다른 모듈과 상호 작용할 수 있는 방법을 정의하는 추상화 형식입니다. 인터페이스를 사용하여 모듈 간의 결합을 줄일 수 있습니다.
- 종속성 주입: 종속성 주입은 모듈이 다른 모듈을 직접 참조하지 않고 모듈이 필요로 하는 종속 개체 외부에서 주입하는 기술입니다. 이렇게 하면 모듈 간의 결합 정도를 줄일 수 있습니다.
- 패키지 구조: 패키지 구조는 모듈을 그룹화하고 모듈 간의 관계를 정의하는 방법입니다. 케이스 구조를 잘 설계하면 모듈 간의 결합을 줄일 수 있습니다.
연관성은 객체 지향 프로그래밍에서 가장 중요한 개념 중 하나입니다. 모듈 간의 결합이 적어 유지 관리성과 확장성이 향상됩니다.
-목록 및 ArrayList
Java의 List 인터페이스는 추상적인 개념이며 List 유형의 개체를 만들 수 없습니다. 따라서 List를 구현하는 클래스 중 하나를 선택하여 객체를 생성해야 합니다. ArrayList는 List 인터페이스를 구현하는 클래스 중 하나이며 동적으로 크기가 조정된 배열을 사용하여 요소를 저장하기 때문에 널리 사용됩니다.
그래서 계략
– List와 ArrayList의 차이점
ArrayList 사이에는 중요한 기능적 차이가 없습니다.
배열목록
따라서 코드를 작성할 때 가능한 한 인터페이스 유형을 사용하는 것이 좋습니다. 그러나 구현의 특정 기능을 사용해야 하는 특정 경우에는 구현 유형을 사용해야 할 수 있습니다.
-구현
구현은 인터페이스를 구현하는 클래스를 의미합니다. 인터페이스는 추상 메서드 집합이며 인터페이스에서 상속하는 구현 클래스는 해당 인터페이스의 모든 추상 메서드를 구현해야 합니다. 구현체를 이용하여 인터페이스에 정의된 사양에 따라 동작하는 객체를 생성할 수 있으며, 객체를 생성한 후 인터페이스에 정의된 메서드를 호출하여 객체를 사용할 수 있습니다. 구현은 다형성 개념을 구현하는 데 사용되므로 동일한 인터페이스를 구현하는 다른 구현을 사용할 수 있습니다.
-상호 작용
인터페이스는 객체지향 프로그래밍에서 클래스나 다른 인터페이스에서 구현할 메서드의 프로토타입(시그니처)만을 선언하는 추상 클래스입니다. 즉, 인터페이스는 클래스가 가져야 하는 메소드의 이름, 매개변수, 반환값 등을 정의하는 데 사용된다.
인터페이스에는 다음 속성이 있습니다.
- 추상화: 인터페이스는 구현 세부 사항을 숨기고 필요한 동작만 정의하는 추상화 형식입니다.
- 다중 상속: 클래스는 단일 상속만 허용하지만 인터페이스는 다중 상속을 허용합니다. 따라서 여러 인터페이스를 구현하여 클래스가 여러 작업을 수행하도록 할 수 있습니다.
- 표준화: 인터페이스는 메서드의 서명만 선언하므로 여러 클래스가 동일한 메서드 이름, 매개 변수 및 반환 값을 사용할 수 있습니다. 이렇게 하면 코드가 더 일관되고 읽기 쉬워집니다.
인터페이스를 사용하면 다른 클래스가 해당 인터페이스를 구현하여 동일한 메서드를 제공할 수 있습니다. 인터페이스를 구현하는 클래스는 인터페이스에 선언된 모든 메서드를 구현해야 클래스 간의 결합이 줄어들고 유연성이 증가합니다.