본문 바로가기
반응형
[OOP]메시지와 메소드의 개념과 관계 개요 OOP(객체 지향 프로그래밍)에서 메시지는 객체가 특정 작업을 수행하도록 요청하는 것입니다. 메서드는 객체 내에서 해당 작업을 구현하는 것입니다. 결론 : 메시지가 객체로 전송되고 객체의 메서드가 요청된 작업을 수행합니다. 설명 OOP에서 객체는 동작과 속성을 정의하는 클래스의 인스턴스입니다. 한 객체가 다른 객체로 하여 작업을 수행하기를 원하면 해당 객체에 메시지를 보냅니다. 메시지는 수행할 작업과 작업에 필요한 데이터를 지정합니다. 메시지를 수신한 객체는 해당 클래스에 정의된 적절한 이름과 매개 변수가 있는 메서드를 찾습니다. 하나를 찾으면 작업을 수행하는 메서드를 실행합니다. 예를 들어 "drive"라는 메서드가 있는 "Car"라는 클래스가 있는 경우 "myCar" 클래스의 객체는 매개 변수가.. 2023. 1. 16.
[OOP] 디자인 패턴을 사용하는 이유 디자인 패턴은 도움이 되는가? 객체지향적 프로그래밍이 무엇인지 이야기할 때 빠지지 않는 것이 디자인 패턴입니다. 팩토리 패턴, 어댑터 패턴, 옵저버 패턴 등 잘 알려진 패턴부터 새롭게 연구된 패턴까지 그 종류가 족히 수백가지에 달합니다. 이것을 더 이상 패턴이라 부르는 게 과연 의미가 있을까 싶을 정도로 많은 종류의 패턴이 고안되었습니다. 디자인 패턴을 하나씩 이해하는 것은 쉽습니다. 그러나 패턴을 외울 작정으로 접근하면 서로 비슷한 패턴이 많아서 헷갈리기 시작합니다. 패턴들 사용에 대한 불편함은 점점 커지다가 근본적인 질문으로 이어집니다. "이 패턴들이 실무에서 도움이 될까?" 이 질문은 공부하기 싫은 사람이 내뱉는 푸념이 아닙니다. 구현을 빨리 하고 싶어서 코드를 패턴에 끼워맞추다 보면 그 코드는 엉.. 2022. 9. 9.
[OOP] 좋은 코드 당신이 생각하는 좋은 코드는? 당신이 어떤 종류의 코드를 작성하는 사람인지 알지 못하지만 한 가지는 확신할 수 있습니다. 당신은 코드를 통해 어떠한 대상과 소통하고 있습니다. 코드는 하드웨어, 소프트웨어, 때로는 다른 프로그래머와 대화하기 위해서 작성됩니다. 당신이 나열한 글자들은 질서를 가지고 의미를 만들어 냅니다. 저는 이 글자들이 일하는 방식에 관심이 많습니다. 자연스럽게 더 좋은 방식을 찾는 일에도 흥미를 가지게 되었습니다. 좋은 코드가 무엇인지에 대한 견해를 정리해보고자 이 글을 씁니다. 프로그래밍을 더 친숙하게 바라봅시다. 웹, 게임, 임베디드와 같은 세세한 구분을 걷어내면 프로그래밍은 결국 무엇입니까? 프로그래머가 실제로 하는 일은 글자를 타이핑하는 일입니다. 우리는 글을 쓰는 사람들입니다... 2022. 9. 2.
[OOP] Abstraction, 추상화를 이해하고 활용하기 개요 추상화는 객체 지향 프로그래밍(OOP)의 네 가지 기본 개념 중 하나입니다. 소프트웨어에서 해당 엔터티를 모델링하고 조작하는 데 사용할 수 있는 복잡한 실제 엔터티의 단순화되고 일반화된 표현을 만드는 프로세스를 말합니다. OOP에서 추상화를 통해 프로그래머는 객체의 필수 기능에 집중하고 중요하지 않은 세부 정보는 무시할 수 있습니다. 이것은 소프트웨어의 복잡성을 줄이는 데 도움이 되므로 이해 및 유지 관리가 더 쉬워집니다. 추상화는 구체적인 클래스에 의해 구현되어야 하는 일련의 메서드를 정의하는 추상 클래스 및 인터페이스를 사용하여 달성됩니다. OOP에서 추상화의 이점에는 향상된 코드 품질, 더 나은 코드 재사용성 및 향상된 유연성이 포함됩니다. 추상 클래스와 인터페이스를 생성함으로써 프로그래머는 .. 2022. 9. 2.
[OOP] SOLID, 객체지향 설계의 원칙 SOLID, 객체지향 설계의 원칙 SRP(Single Responsibility Principle): 단일 책임 원칙 OCP(Open Closed Priciple): 개방 폐쇄 원칙 LSP(Listov Substitution Priciple): 리스코프 치환 원칙 ISP(Interface Segregation Principle): 인터페이스 분리 원칙 DIP(Dependency Inversion Principle): 의존 역전 원칙 2022. 8. 27.
[OOP] Inheritance, 상속이란 무엇인가 상속의 개념 부모 클래스로부터 메소드와 필드를 받아와 자식 클래스에 기능을 추가하거나 재정의합니다. 상속은 캡슐화, 추상화와 관련됩니다. 부모 클래스는 super class, base class라고 부릅니다. 자식 클래스는 child class, sub class, derived class라고 합니다. 상속의 장점 1. 클래스 재사용 2. 계층적 관계를 기반으로 다형성을 활용(좋은 설계의 출발점) 자식 클래스 다만 생성자는 상속되지 않습니다. 부모 클래스의 접근 제어자가 private이면 자식 클래스에서 상속은 받지만 사용은 불가합니다. C#에서는 단일 상속만 가능합니다. Object 클래스 Object 클래스는 모든 클래스가 내부적으로 상속받는 클래스입니다. c#에서 가장 상위의 class는 오브젝트 .. 2022. 8. 26.
[OOP] Abstraction, 추상화란 무엇인가 추상화의 정의 추상화는 공통점을 취하고 차이점을 제거하는 일반화를 사용합니다. 또 하나의 방법으로, 중요한 부분을 강조하기 위해 세부 사항을 제거합니다. 프로그래밍에 있어서 추상화는 불필요한 코드의 제거, 중요한 부분의 강조라고도 볼 수 있습니다. 위키피디아는 추상화를 다음과 같이 정의합니다. 컴퓨터 과학에서 추상화는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다. 컴퓨터 과학 및 소프트웨어 공학에서 추상화는 매우 중요합니다. 소프트웨어는 그 자체로 추상적이며 소프트웨어 생산 분야는 추상화 기술입니다. Keith Devlin은 추상화에 대한 자신의 견해를 이렇게 말합니다. ”컴퓨팅은 추상화를 구성하고 조작하고 추론하는 일이다. 정확한 방식으로 추상화해야 좋은 .. 2022. 8. 26.
[OOP] Encapsulation, 캡슐화란 무엇인가 캡슐화의 정의 캡슐화(Encapsulation)라는 이름은 두 가지 특성을 묘사하고 있습니다. 그 두 가지는 곧, 데이터와 기능을 '감추는 특성'과 '모으는 특성'을 말합니다. 접근지정자를 통해 데이터를 감춥니다. 속성(Data fields)과 행위(Methods)를 클래스로 모읍니다. 우리는 어떠한 클래스를 사용할 때, 그 클래스의 모든 측면을 이해하고 사용할 필요가 없습니다. 만약 그래야만 한다면 수많은 프로그래머들이 한 프로그램을 작성하기란 불가능한 일이 됩니다. 우리는 클래스 내부가 어떻게 되어 있는지 몰라도 됩니다. 다르게 말하면, 언제나 "몰라도 되게 끔 프로그래밍"해야만 합니다. 당신은 남이 만든 코드를 사용할 때, 코드의 작성자가 '당신이 볼 수 있도록 외부로 드러낸 것', '사용을 허가해.. 2022. 8. 26.
[OOP] 디자인 패턴의 유형 디자인 패턴 디자인패턴이란 소프트웨어를 디자인하면서 반복적으로 발생하는 문제를 해결하는 재사용 가능한 해결책을 의미합니다. 논문 을 통해 제안되었습니다. 이후 23개의 패턴을 수록한 책 으로 인해 보편화되었습니다. GoF : 에리히 감마, 리차드 헬름, 랄프 존슨, 존 블리시디스 디자인 패턴을 사용하려면 알아야 합니다 컨텍스트 (context) 문제가 발생하는 여러 상황을 가리킵니다. 패턴이 적용될 수 있는 상황을 가리킵니다. 패턴이 유용하지 못한 상황도 존재합니다. 문제 (problem) 패턴이 적용되어 해결될 필요가 있는 여러 디자인 이슈입니다. 이때 여러 제약 사항과 영향력도 문제 해결을 위해 고려해야 합니다. 해결 (solution) 해결은 반드시 구체적인 구현 방법이나 언어에 의존적이지 않습니다.. 2022. 8. 20.
[OOP] 인터페이스로 다형성을 이끌어내기 참고 영상 두 클래스는 완벽하게 똑같은 데이터를 가지고 있습니다. 유일하게 다른 것은 서로의 이름입니다. 인스턴스화한 모습을 보면 데이터는 같은데 Type은 달라집니다. 위와 같은 메소드를 추가했다고 해봅시다. GetPoint 메소드는 CharacterPoint만 사용 가능합니다. 자료가 같은데도 동시에 사용할 수 없습니다. 그렇다고 해서 BulletPoint 전용 함수를 오버로딩해서 만드는 해결방법은 구조적으로 좋지 않습니다. 우리는 이때 클래스들의 공통 속성을 뽑아서 인터페이스를 만들 수 있습니다. public interface iPoint { int X { get; set; } int Y { get; set; } } public class CharacterPoint : iPoint { public .. 2022. 8. 20.
[OOP] Interface 인터페이스를 이용하는 이유와 장점 부모 클래스는 세 가지 클래스로 만들 수 있습니다. 일반 클래스, 추상 클래스, 인터페이스 왜 세 가지나 있을까요? 어떻게 구분해서 사용해야 할까요? 이 글에서는 인터페이스를 중점적으로 다루어 보겠습니다. "그냥 일반 클래스를 쓰면 안 될까요?" A. 일반 클래스끼리 상속을 시키면 결합도가 높아집니다. 수정, 삭제가 양측에 영향을 줄 수 있습니다. 인터페이스는 구체적인 구현을 하지 않기 때문에 결합도가 낮습니다. 상속 관계와 다르게, 유연하게 확장하고 수정할 수 있어요. "추상 클래스만 쓰면 되지 않나요?" A. 추상 클래스는 일반 메서드와 추상 메서드를 모두 가질 수 있습니다. 인터페이스는 모든 메소드에 구현이 없음을 보장합니다. 추상 클래스를 의도에 맞게 사용한 예를 들면 아래와 같습니다. 부모가 '.. 2022. 8. 19.
[OOP] 상태 패턴 State Pattern 상태 패턴이란? 객체가 어떤 상태에 따라 다른 행위를 해야 할 때 사용합니다. 상태를 객체화해서, 상태객체가 행동을 대신하도록 위임하는 패턴을 말합니다. 자신이 직접 상태를 체크하여 상태에 따라 행위를 호출하지 않습니다. 스테이트 패턴은 코드내의 조건문들을 대체하려는 목적으로 사용됩니다. 상태 패턴을 사용하는 이유 패턴을 쓰지 않으면, 클래스에는 다음 요소들이 있을 것입니다. 상태를 담는 변수 상태를 결정하는 set 메소드 상태에 따라 행동하는 메소드 : switch문 또는 if else 체인 TV를 켜고 끄는 상황을 생각해봅니다. TV 전원이 켜진 상태에서 전원 버튼을 누르면, 전원을 끈다. TV 전원이 꺼진 상태에서 전원 버튼을 누르면, 전원을 켠다. 여기에 절전 상태가 추가되면 상태를 참조하는 메소.. 2022. 8. 19.
[OOP] 객체지향 기본 개념 요약 정리 1. Class 2. Object 3. 추상화 Abstraction 4. 캡슐화 Encapsulation 5. 상속 Inheritance 6. 다형성 Polymorphism 추상화 Abstraction 추상화란 구구절절한 내용들의 핵심만 추려내서 간단명료하게 만드는 것이다. 추상화를 통해 대상의 특성을 일반화하거나 세부사항을 제거하여 단순하게 만든다. 디테일을 제거 : 지하철 노선도 일반화 : 토끼, 개, 고양이는 동물 1. 데이터 추상화 & 제어 추상화 더보기 데이터 추상화 Data Abstraction 변수 : 메모리 위치를 우리가 지은 변수명으로 대신한다. 타입 : 자료 특성를 간단하게 표시한다. int, float, char 처럼. 배열 : 같은 타입의 연속된 변수들의 모음. int int int.. 2022. 8. 19.
반응형