본문 바로가기

자바29

캡슐화 지난 시간에 이어 아래 코드를 확인해 보도록 하겠습니다. 아래 코드에서 CalculateCommnad는 CalculateType, num1, num2 를 가지고 있습니다. 만약 해당 필드가 삭제가 된다면 getter 메서드도 함께 제거 되어야 하며 Client 코드 및 CalculateCommand를 사용 하는 기타 코드들도 변경이 이루어 져야 합니다. 이는 결합도가 높은 코드라 볼 수 있으며 필드 따로 계산로직 따로 사용하기 때문에 응집도가 낮다고할 수 있습니다. CalculateCommand를 너무 잘 아는 Clinet 객체 지향적인 코드는 결합도는 낮고 응집도는 높은 코드입니다. public class Client { public int someMethod(CalculateCommand calcul.. 2023. 12. 11.
추상클래스와 인터페이스 추상 클래스 : 인스턴스화할 수 없는 클래스입니다. 즉, 객체로 만들 수 없습니다. ( 추상메서드를 익명으로 구현하면 가능하지만요..) 이 클래스는 다른 클래스가 상속 받아 사용될 목적으로 설계 됩니다. 부모 클래스는 제공하지만 실제 인스턴스가 생성 되면 안되는 클래스 추상클래스는 말 그대로 추상적인 개념만 제공하는 클래스로 사용되어야 한다. 상속을 목적으로 사용된다. // 추상 클래스로 선언 public abstract class Animal { public void sound() { System.out.println("Animal.sound()"); } } public class AnimalSoundMain { public static void main(String[] args) { Dog dog =.. 2023. 12. 11.
상속과 다형성 기본 상속(Inheritance) : 한 클래스가 다른 클래스의 속성을 가져와 확정하거나 수정하는 메커니즘 입니다. 자바는 다중 상속을 지원하지 않습니다. 그래서 extends 대상은 하나만 선택할 수 있습니다. 물론 부모가 상위 부모를 가지는 것은 괜찮습니다. 만약 비행기와 자동차를 상속 받아서 하늘을 나는 자동차를 만든가고 가정해보면. 아래 그림과 같이 다중 상속을 사용하게 됩니다. AirplaneCar 입장에서 move()를 호출할 때 어떤 부모의 move() 사용해야 할지 애매한 문제가 발생합니다. 이것을 다이아몬드 문제라고 합니다. 그리고 다중 상속을 사용하면 클래스 계층 구조가 매우 복잡해질 수 있습니다. 이런 문제점 때문에 자바는 클래스의 다중 상속을 허용하지 않습니다. 대신에 인터페이스의 다중 .. 2023. 12. 11.
객체지향적으로 개발해야 하는 이유 객체지향 프로그래밍이란 절차지향적인 개발 방법에서 발생하던 여러가지 문제점들을 해결하기 위해 등장한 패러다임 객체지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용합니다. 레고 블럭 조립하듯이 키보드, 마우스 갈아 끼우듯이 컴퓨터 부품 갈아 끼우듯이 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법 객체지향 프로그래밍은 컴퓨터의 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것입니다. 객체는 메시지를 주고 받고, 데이터를 처리할 수 있습니다(협력) 실세계와 객체 지향을 1:1로 매칭 x 그래도 실세계의 비유로 이해하기에는 좋음 역할과 구현으로 세상을 분리 캡슐화는 데이터(변수)와.. 2023. 12. 11.