TIL💡/Design Pattern(13)
-
[OOP] 객체지향의 특징 - 상속(Inheritance)
객체지향에서의 상속이란 객체가 다른 객체를 상속받아 상속받은 객체의 요소를 사용하는 것을 의미한다. 이 때 객체를 상속받은 객체는 자식, 상속된 객체는 부모라 칭한다. 자식 객체는 상속된 부모 객체의 은닉화 구성에 따라 정해진 변수, 메소드에 접근할 수 있다. 또한 부모 객체가 추상 객체일 경우 추상 메소드와 오버라이딩을 통해 부모 객체의 메소드를 구현하거나 다룰 수 있다. 추상 객체 추상 객체는 하나 이상의 추상 메소드를 포함하는 객체다. abstract public class Main { // 메소드 } JAVA로 표현한 추상 클래스는 위와 같으며, 클래스의 맨 앞에 abstract 키워드를 적어 해당 객체가 추상 객체임을 표현할 수 있다. 추상 메소드 추상 메소드는 자식 객체에서 구현해야하는 메소드..
2022.10.02 -
[OOP] 객체지향의 특징 - 캡슐화(Encapsulation)와 정보 은닉
캡슐화(Encapsulation) 객체, 즉, 클래스의 내부 변수와 메소드를 하나로 패키징하는 특징이다. 객체에 선언된 변수나 메소드가 구분없이 중구난방으로 접근할 수 있다면 정상적인 객체로 보기 어렵다. 캡슐화와 비슷한 개념으로 정보 은닉이라는 개념이 있다. 정보 은닉은 객체의 내부 구현을 숨김으로써 객체가 반드시 정해진 메소드를 통해 상호작용하도록 유도한다. 이 두 개념은 객체의 응집도와 독립성을 높임으로써 객체의 모듈화를 지향한다. 객체의 모듈화가 잘 이루어져있을 경우 모듈 단위의 재사용이 매우 용이하다. 여러 로직에서 중복되는 코드를 모듈로 대체하면 모듈 내부의 소스만 수정하는 것으로 수정사항을 반영할 수 있다. 이는 곧 간편한 유지보수로 직결된다. 캡슐화의 예제 JAVA의 경우 접근제어자를 통해..
2022.10.02 -
[OOP] 객체 지향 (Object Oriented Programming)
객체란? 객체지향. 말그대로 객체를 지향하는 언어이다. 그러면 객체가 무엇인지를 알아야 한다. 객체란 프로그램 동작의 주체이다. 이 객체는 유/무형을 가리지 않는다. 객체는 실체가 명확하지 않은 무형의 개념일 수도 있다. 모든 객체는 상태와 동작을 가진다. JAVA는 이러한 개념을 아래와 같이 접근한다. 객체지향 JAVA 객체 클래스 상태 멤버 변수 동작 메소드(함수) JAVA에서 이러한 객체를 사용하려면 메모리에 할당해야 하고, 이렇게 할당한 객체는 인스턴스(instance)이다. Car 클래스를 메모리에 할당하여 새로운 인스턴스를 만드는 것은 현실에서 자동차 하나를 뽑는 것과 동일한 개념이다. 객체지향 모든 객체는 각 객체의 특성에 부합하는 상태와 동작을 가지며, 이를 통해 객체 간의 상호작용을 코드..
2022.10.01 -
[컴퓨터구조] RISC, CISC 차이
중앙 처리 장치(CPU)는 두 가지가 있다. → RISC, CISC CISC의 단점을 처리하기 위해 RISC가 세상에 나왔다. CISC(Complex Instruction Set Computer) 연산에 처리되는 복잡한 명령어들을 수백 개 이상 탑재하고 있는 프로세서 ex) Intel x86 CISC는 말그대로 복잡한 명령어 집합을 갖는 CPU 아키텍처이다. 명령어가 복잡하기 때문에 명령어를 해석하는 데 시간이 오래 걸리며, 명령어 해석에 필요한 회로도 복잡하다. 명령어가 가변 길이이기 때문에 병렬처리도 불가능하다. 복잡한 명령은 발열이 날 수 있으므로 휴대폰에 사용 불가하다. 설계가 복잡하나 복합적인 명령으로 인해 프로그래밍 작업이 간단해진다. 다양한 주소 지정 모드를 사용한다. RISC 프로세서에 비..
2022.09.30 -
[클린코드] 동시성
평소 부주의하게 다중 스레드를 사용했던 경험이 있어서 마침 클린코드에 언급된 동시성 내용을 정리해보았다. 동시성이 필요한 이유? 동시성은 결합을 없애는 전략이다. 결합을 풀어내면 애플리케이션의 구조와 효율이 극적으로 나아진다. 하지만 구조적 개선만을 위해 동시성을 채택하는 것은 아니다. 어떤 시스템은 응답 시간과 작업 처리량 개선이라는 요구사항으로 인해 직접적인 동시성 구현이 불가피하다. ex1. 단일 스레드 수집기는 웹 소켓에서 입출력을 기다리는 시간이 아주 많다. 한 번에 한 사이트를 방문하는 대신 다중 스레드 알고리즘을 이용하면 수집기 성능을 높일 수 있다. ex2. 한 번에 한 사용자를 처리하는 시스템이 있다고 하자. 한 사용자를 처리하는 시간은 1초다. 사용자가 소수라면 시스템이 아주 빨리 반응..
2022.05.02 -
[객체지향] 객체지향의 사실과 오해(토끼책) Ch4 ~ 7 정리
04.역할, 책임, 협력 최후통첩 게임을 통해서 인간은 절대적으로 이기적이고 합릭적인 존재로 사는 것이 아니라, 문맥에 따라 본연의 특성을 배제하고 자신의 이익을 최소화하는 불합리한 선택을 하기도 한다. 객체 세계에서도 협력이라는 문맥이 객체의 행동 방식을 결정한다. 책임 객체 지향의 세계에서는 어떤 객체가 어떤 요청에 대해 대답해줄 수 있거나, 적절한 행동을 할 의무가 있는 경우 = 책임 책임은 객체지향 설계의 가장 중요한 재료로서, 소프트웨어 객체에 책임을 적절하게 할당해야 한다. 책임은 객체의 공용 인터페이스(public interface)를 구성하고, 이는 캡슐화로 이어진다. 역할 역할을 통해 협력을 단순화할 수 있다. 다양한 객체들이 동일한 협력에 참여할 수 있기 때문에 재사용성이 높아진다. 역..
2022.02.06