ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Software Quality with OOP Concepts
    학교생활/소프트웨어디자인패턴 2023. 9. 15. 00:06
    728x90

     

    추상화는 객체들의 공통적인 특징을 뽑아내는 것이다. 객체들의 공통적인 데이터와 기능을 도출해서 추상클래스나 인터페이를 정의한다.

    Interface(자바에서 ADT)는 미래에 예측할 수 없는 것까지 미리 만들어둬서 flexible 하게 만들 수 있다. 다이나믹하게. maintainability(유지보수성)와 extensibility(기능의 확장성)가 가능하다.

     

    상속은 견고한 연결이다. (Strong Coupling) subclass 는 superclass 구현에 직접적으로든 간접적으로든 영향을 받는다. 기반 클래스의 변화가 모든 파생 클래스에 영향을 주기 때문에, 예상치 못한 요구사항의 대처에 유연하게 대처하지 못한다.

    의존성이 강함. <- reuseability 가 힘들어짐
    상속은 소프트웨어 설계와 관련하여 다양한 장점을 제공할 수 있습니다. 재사용성을 통해 상위 클래스의 코드를 다시 쓸 필요 없이 서브 클래스에서 사용할 수 있으므로 오류를 줄이면서 시간과 노력을 절약할 수 있습니다. 

     

    Composition

    compostition 은 다른 객체의 인스턴스를 자신의 인스턴스 변수로 포함해서 메서드를 호출한다. 이때 해당 인스턴스의 내부 구현이 바뀌어도 영향을 받지 않는다.

     

    Inheritance vs Composition

    그렇다면 상속 관계를 맺을지, 포함 관계를 맺을지는 어떻게 결정하면 좋을까?
    Circle is a Point.
    Circle has a Point
    위의 예제에서는 원이 점이라기 보다는 원이 점을 가지고 있는 것이기 때문에 포함 관계를 맺어주는 것이 더 적합하다. 

    다시 말해 Inheritance는 object 사이에 is-a relationship을 갖고 있을 때 사용되며, compostion은 has-a relationship을 갖고 있을 때 사용된다.

     

    다형성 은 하나의 메소드나 클래스가 다양한 방법으로 동작하는 것을 말한다. 

    다형성을 활용하면 클래스간 의존성이 줄어들며 확장성이 높고 결합도가 낮아져 안전성이 높아진다.

    객체지향 프로그래밍에서 추상화와 다형성을 함께 사용하면 코드를 더 모듈화하고 관리하기 쉽게 만들 수 있으며, 객체 간의 관계를 더 명확하게 정의할 수 있다.

     

    동적 링킹은 런타임에 모듈을 로드하고 연결하여 프로그램을 유연하게 확장하는 기술이다. 동적 링킹을 사용하면 다형성을 더욱 유연하게 활용할 수 있다.
예를 들어, 다형성을 사용하여 여러 타입의 객체를 처리하는 코드를 작성할 때, 동적 링킹을 통해 런타임에 필요한 클래스나 모듈을 로드하고 연결할 수 있다. 이렇게 하면 새로운 클래스나 모듈을 추가하거나 수정하지 않고도 프로그램의 동작을 확장하거나 변경할 수 있다. 

     

     


    생각해볼 것
    Q. 객체지향 개념을 사용해서 프로그래밍을 한다는 것은 무엇을 어떻게 한다는 것인가?
    그래서 무엇이 어떻게 좋아진다는 것인가?
    procedual programming 과 비교해서 설명하라.

     

     

     Procedual Programming 는 시스템 동작방식을 먼저 생각하고, 그 다음 세부 모델을 디자인 한다. 그렇기 때문에 data 는 data끼리 struct 로 묶고, process 는 process 끼리 존재한다. 이렇게 기능과 데이터의 불일치는 유지 보 수를 어렵게 한다.
    반면 객체지향으로 프로그래밍은 객체를 먼저 설계하고 객체의 상호작용(절차)을 설계한다. 따라서 ADT 를 이용 해 data 와 기능을 묶어 캡슐화를 할 수 있다. 이는 곧 프로그램 운영을 용이하게 해준다. 또한 procedual programming 보다 유지 보수성이 좋아진다.
     예를 들어, 라디오는 ‘소리가 증폭되는 부분’, ‘소리가 나오는 부분’, ‘안테나를 잡는 부분’ 이 나뉘어져 있다. 라디오 가 고장나서 수리를 해야 할때, 어디를 수리할지 확실하게 알 수 있다. 이렇게 캡슐화는 객체가 맡은 역할을 수행하 기 위한 하나의 목적을 위해 데이터와 기능을 묶는 것이다.

     


     

    Q. Inheritance 와 Polymorphism 은 각각 무엇이고 어떤 관계가 있는가?
    이것들이 어떻게 Software Quality 를 높이는데 기여하는가? 설명하라.

     

    상속은 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 만들고, 확장할 수 있다.

    다형성은 어떤 객체의 속성이나 기능이 그 맥락에 따라 다른 역할을 수행할수 있는 객체 지향의 특성이다. 

    다형성은 다양한 개념이 결합되어 구현하는데, 한 클래스의 기능을 구체적으로 확장한 상속을 통해 다형성을 구현할 수 있다. (예시: Car)

    +

    상속과 다형성을 사용하면 다이나믹하고 유연한 프로그램이 된다. 확장 가능하도록 설계된 소프트웨어 시스템은 미래의 성장을 고려한다. 이는 유지보수와 확장을 용이하게 하여 소프트웨어 퀄리티를 높인다.

     

    728x90

    '학교생활 > 소프트웨어디자인패턴' 카테고리의 다른 글

    Strategy Pattern  (0) 2023.10.15
    SOLID Principles  (0) 2023.10.13
    Agile Design  (0) 2023.10.05
    Overview of XP with Planning, Testing and Refactoring  (0) 2023.09.21
    Software Quality Models and Philosophies  (0) 2023.09.07
Designed by Tistory.