# ISP

객체지향 개발 5대 원리를 파헤쳐 보자!
개요 객체지향의 5대 원리를 이해하고는 있었지만, 명확히 파헤쳐 보지는 못했다. 그렇기에 해당 글을 작성하면서 다시 되새김 하면서 좀 더 객체 지향적인 설계가 가능한 여러분이 됐으면 하는 마음에 해당 글을 작성합니다. SOLID : 객체 지향 설계 먼저 객체 지향 설계란 무엇일까? -> 말을 풀어서 설명을 하게 된다면 객체를 지향하는 설계라는 뜻이다. 해당 객체 지향 설계를 적용하게 되었을 때 장점!! 코드 확장 유지 보수 불필요한 복잡성을 제거해 리팩토링에 드는 시간을 줄여서 결국에는 개발에 대한 생산성을 높이는 효과를 볼 수 있는 하나의 공통점을 가지고 있다. 어떻게 보면 이는 어느 특정 목표에 도달하기 위해서 지켜야 하는 원칙들 이라고 볼 수 있습니다. 이러한 원칙들을 통해서 더 빠르게 목표를 달성하게 만들 수 있기 때문이죠 
좋은 객체 지향 설계의 5가지 원칙
SOLID 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙 1. SRP(Single Responsibility Principle) 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. 문맥과 상황에 따라 다르며, 클 수도 있고 작을 수도 있다. 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것이다. ex) UI변경, 객체의 생성과 사용을 분리 > SRP 적용전 > SRP 적용후 2. OCP(Open/Closed Principle : 개방-폐쇄 원칙) 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 다형성을 활용하여 지킬 수 있다. >

[F-Lab 모각코 챌린지 21일차] DNS 동작 방식
요즘 TCP/IP 네트워크 과정을 다이어그램으로 시각화하는 과정을 그리고 있다. 공부했던 DNS 부분이 딱 한마디로 퉁쳐지는 것을 느꼈다. "DNS 서버에게 IP주소를 받아온다." 분명 무언가 더 많을텐데. 하여 찾아보니 역시나 복잡한 과정이 있었다. 우선 다이어그램으로 같이 나타낼 수 있는 부분까지 공부해보려한다. DNS Domain Name System 정의 DNS는 사용자가 IP주소 대신 도메인 이름을 사용하여 웹사이트에 연결할 수 있도록 한다. 인터넷 전화번호부로 많이 비교한다. 웹 브라우저는 IP 주소를 통해 상호작용한다. DNS는 브라우저가 인터넷 자원을 로드할 수 있도록 도메인 이름을 IP주소로 변환한다. 
객체지향설계의 5원칙 SOLID
2000년대 초반에 로버트 C. 마틴이 객체지향언어를 이용해서 객체지향프로그램을 올바르게 설계하기 위해 5가지의 기본원칙으로 제시한 것을 마이클 페더스가 두문자어로 소개한것이 SOLID 원칙. 이는 응집도를 높이고, 결합도를 낮추는 고전 원칙을 객체지향의 관점에서 재정립한 것. SRP (Single Responsibility Principle) 단일 책임 원칙 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다. - 로버트 C. 마틴 하나의 클래스는 하나의 책임만 가져야 한다. 이는 애플리케이션 모듈 전반에서 높은 유지 보수성 및 캡슐화를 유지할 수 있다.   나쁜 예시 Person이라는 클래스에 3가지의 책임이 주어져 있음.   개선된 예시 하나의 클래스마다 하나의 책임을 부여함으로써 SRP를 준수. OCP (Open Closed Principle) 개방-폐쇄 원칙 소프트웨어 엔티티(클래스, 모듈,

인터넷은 어떻게 작동하는가?
인터넷이란? 인터넷이란 각 컴퓨터들간의 TCP/IP 통신 프로토콜을 이용해서 서로 데이터를 주고 받도록한 네트워크를 말합니다. 또는 네트워크의 네트워크를 구현하여 모든 컴퓨터를 하나의 통신망 안에 연결하고자 하는 의도엣 인터넷이라고도 합니다. TCP/IP란? TCP/IP가 나타난 이유는 먼저 컴퓨터간의 통신을 위해서입니다. TCP/IP는 컴퓨터와 컴퓨터간의 지역네트워크(LAN) 광역네트워크(WAN)에서 원할한 통신을 가능하도록 하기위한 통신규약으로 정의할 수 있습니다. 최초는 ARPANET(최초의 컴퓨터)로 시작되었으며 미국방위통신청에서 컴퓨터간의 통신을 위해서 TCP/IP를 사용하도록 한것이 그 시초가 되었습니다. 컴퓨터 통신을 위해서 TCP/IP를 선택한 이유는 TCP/IP의 개방성에 있습니다. 즉, 하드웨어, 운영체제, 접속매체에 관계없이 동작할 수 있다는 점 때문에 인터넷 통신을 위한 핵심으로 선택되었습니다. 그리고 이름에서
Interface Segregation Principle
아래와 같이 수륙양용차에 대한 인터페이스를 통째로 정의하지 않고, 자동차와 보트에 대한 인터페이스를 각각 정의한 후 수륙양용차를 구현해야할 경우에는 인터페이스 두개를 구현하면 된다. 레퍼런스 https://www.youtube.com/watch?v=WBJm4U86m5k

[Spring] 좋은 객체지향의 5가지 원칙, SOLID
객체지향 프로그래밍의 특성과 장점을 끌어올리기 위해 프로그램을 설계할 때 필요한 5가지 원칙이 있다 원칙을 잘 지킨다면 유지보수하기 쉽고, 유연하고, 확장이 쉬운 소프트웨어를 만들수 있을것이다 객체지향 프로그래밍의 설계과정 요구사항을 정리하고 세분화 한다, 세분화한 기능들은 알맞은 객체에 할당한다 기능을 구현하는 데에 필요한 데이터를 객체에 추가한다 해당 데이터를 이용하는 기능을 구현한다, 기능은 되는대로 캡슐화 하는것이 좋다 객체 간에 어떻게 메소드 호출을 주고 받을지 결정한다 > 💡 캡슐화란? > > 객체의 속성과 행위(메서드)를 하나로 묶고, 실제 구현 내용 일부를 외부에 감추어 은닉한다 객체지향 설계원칙, SOLID 1. SRP (Single Responsibility Principle) 단일 책임 원칙 하나의 클래스는 하나의 책임만 가져야 한다 클래스를 변경하는 이유는 단 하나여야 한다 이를 지키지
인터넷 작동 ?
movie ip 주소 집주소 isp : 인터넷 서비스 공급자 인터넷을 이용하는 휴대기기(노트북,스마트폰)에 ip 주소를 부여 ip 주소는 숫자 배열로 기억하기 어렵다. ip주소 : xxx.xxx.xxx.xxx (숫자로 구성됨) yahoo.co.kr / google.com 같은 도메인 이름 사용 208.65.153.238(ip주소) - youtube.com(도메인) DNS 인터넷판 전화번호부 ip주소와 도메인을 연결시켜주는 역할 세계적인 도메인 관리기관 : ICANN 인터넷 작동방식 사용자가 브라우저에 도메인 입력(youtube.com). 브라우저가 ip주소를 얻기위해 dns server에 요청

NestJS 그리고 SOLID
javascript 혹은 typescript를 사용하는 백엔드 개발자라면 한번쯤은 NestJS에 대해 들어봤을 것이다. NestJS는 JS 진영의 스프링이라고도 불리는 프레임워크이다. 스프링과 마찬가지로 DI, IoC 등 좋은 객체지향 프로그래밍을 할 수 있도록 도와주고 있다. NestJS는 스프링에 비해 자료가 많지 않고 더더욱 SOLID를 직접 적용한 예시를 찾기가 힘들어 정리해보려고 한다. Philosophy 문서를 살펴보면 개발자가 써둔 NestJs 철학이 있는데 내용은 아래와 같다. > In recent years, thanks to Node.js, JavaScript has become the “lingua franca” of the web for both front and backend applications. This has given rise to awesome projects like
인터넷이 뭐길래
1. 인터넷은 가상의 구름이 아님 나는 인터넷이라는 가상의 클라우드 공간에 모든 웹 페이지가 저장되어있고, 그 안에 자유롭게 돌아다니면서 정보를 찾는 무언가라고 생각했지만 실은 아니었음 그럼 인터넷은 무엇? 2. 인터넷은 컴퓨터(서버)와 컴퓨터(서버)끼리 연결한 선이었음 구리선일 수도 있고 광케이블일수도 있고.. 땅속에 묻혀진 이 선을 통해 컴퓨터끼리 연결해 각종 데이터를 전송받는 것이었음 예를들면 웹페이지는 그 서버 컴퓨터의 하드디스크에 저장 된 파일임!!! 3. 바다 건너 미국에 있는 아마존 웹페이지에는 어떻게 접속? 바다 밑에 인터넷 케이블을 깔아놓아서 각 대륙으로 연결시켜놓았음 이미...! 거리상 멀기때문에 한국에서 롤 북미서버로 게임을 하면 핑이 높은것... 4. 각각의 서버는 internet protocol 주소(=ip address)라는 주소를 가지고있고, 이 주소를 통해 접근할

왜 3-way handshake를 사용할까?
개요 본 글은 네트워크의 5가지 계층과 트랜스포트 계층에 해당하는 TCP의 사용 이유, 그리고 지연시간 보상을 위해 사용하는 웹 프록시, CDN에 대해 설명하는 글이다. 서론 F-lab 오리엔테이션에서 기습적으로 질문을 받았다. "3-way handshake를 사용하는 이유가 무엇일까요?" 갑작스러운 질문에 당황했지만 나름 알고 있는 네트워크 지식을 동원하여 어찌저찌 대답은 했었던 것 같다. 하지만 대답하는 동안에도 스스로 '이게 맞나?' 생각이 들 정도로 확신이 없었고, 지금 돌이켜보니 질문자의 의도를 제대로 파악하지 못한 채로 알맞지 않은 대답을 했었다는 걸 깨닫게 되었다. "쉽게 설명하지 못 하면 제대로 알지 못 하는 것이다." 아인슈타인의 오랜 격언을 떠올려보면서 스스로 배웠던 네트워크 지식을 되짚어보며 정리해보고자 한다. 네트워크 5계층 네트워크를 공부하다보면 흔히 네트워크는 7계층으로 이루어져있다고 배운다. 그래서 때때로 학습자들은

[section 2] 객체지향 설계 원칙
SOLID SRP(Single Responsibility Principle, 단일 책임 원칙) > 클래스의 기능은 하나의 책임을 수행하는 데 집중해야 함 OCP(Open Close Principle, 개방 폐쇄의 원칙) > 확장에는 열려있고 변경에는 닫혀야 함 LSP(The Liskov Substitution Principle, 리스코브 치환의 원칙) > sub class의 객체는 super class의 참조 변수에 대입해서 super class의 역할을 수행하는데 문제가 없어야 함 ISP(Interface Segregation Principle, 인터페이스 분리의 원칙) > 인터페이스의 단일 책임을 위한 원칙 DIP(Dependency Inve

SOLID 원칙 (객체 지향 설계)
SRP : 단일 책임 원칙 (Single Responsibility Principle) 한 클래스는 하나의 책임만 가져야 한다. > 위에서 말하는 책임 이라는 단어는 기능 이라고 해석이 가능하다. 예를 들면 나라는 객체가 존재 한다면 아들,직장인,남자친구 등 다양한 소속 및 위치에서 책임을 가진다. 그러한 책임들을 하나의 객체에 각자 매칭하여 변경이 있을 떄 파급효과가 최대한 적도록 설계 해야한다. OCP : 개방-폐쇄 원칙 (Open/Close Principle) 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야한다. > 위에 말하는 내용은 기존 코드를 변경하지 않고, 기능을 추가 할 수 있도록 설계 해야한다. 예를

인터넷이 동작하는 원리
인터넷은 웹의 중추이자, 웹을 가능케 만들어주는 기술적 기반이다. 가장 기본적으로는, 인터넷은 서로 통신 하는 컴퓨터들의 거대한 네트워크이다. > 간단한 네트워크 두 컴퓨터가 연결이 필요할 떄, 너는 그것들을 연결해야한다. 물리적으로든 무선으로든. 모든 현대 컴퓨터는 이러한 연결 중 하나로 연결을 지속할 수 있다 이러한 네트워크는 두 대의 컴퓨터로 제한되지 않는다. 너는 네가 바라는 만큰 많은 컴퓨터를 연결할 수 있다. 그러나 그건 빠르게 복잡해진다. 만약 10개의 컴퓨터를 연결하려 한다면, 너는 컴퓨

[개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴] 설계 원칙: SOLID
SOLID 단일 책임 원칙 (Single responsibility principle; SRP) 개방-폐쇄 원칙 (Open-closed principle; OCP) 리스코프 치환 원칙 (Liskov substitution principle; LSP) 인터페이스 분리 원칙 (Interface segregation principle; ISP) 의존 역전 원칙 (Dependency inversion principle; DIP) [1] 단일 책임 원칙 (Single responsibility principle; SRP) > 💡 클래스는 단 한 개의 책임을 가져야 한다. 단일 책임 원칙 위반이 불러오는 문제점 코드를 절차 지향적으로 만들어 변경을 어렵게함 한 책임의 변화가 다른 책임의 코드에 연쇄적으로 영향을 줌 재사용을 어렵게함 실제 사용하지 않는 기능이 의존하는 패키지까지
인터페이스 분리 원칙(ISP)
Robert C. Martin은 해당 원칙에 대해 이렇게 말했다. > “Clients should not be forced to depend upon interfaces that they do not use“ 즉 인터페이스를 억지로 공통으로 쓰려하는 것 보다 차라리 분리해서 쓰는 것이 낫다. 몇 가지 사례를 봐보자. Example 1 먼저 OCP 원칙에서 소개했던 예제를 다시 봐보자. 이 예제에서 우리는 기존에 있던 두 가지 Account 타입에 FixedTermDepositAccount를 추가해도 OCP를 어기지 않을 수 있도록 설계했었다. 즉 Account 인터페이스를 두고 각 Account 타입에서 이를 구현했으며, 클라이언트는 인터페이스와 통신하도록 했다. 하지만 한가지 문제가 있다. 바로

SOLID 원칙과 인터페이스 분리 원칙(ISP) | Today I Learned
피드백은 언제나 환영합니다 :) 🤔 Interface? > 인터페이스(interface)는 클래스들이 구현해야 하는 동작을 지정하는데 사용되는 추상 자료형이다. - Wikipedia Interface 를 더 쉽게 이야기하면 구현된 것이 거의 없는, 밑그림만 있는 기본 설계도라고 이야기할 수 있다. Interface 는 일반 메소드나 멤버 변수를 가질 수 없고, 오로지 추상 메소드와 상수만을 가질 수 있다. 그렇다면 Interface 를 사용하는 이유는 무엇일까? 한 회사에서 각 브랜드의 스마트폰과 관련된 기능을 구현하려고 한다. 개발자 A에게는 갤럭시의 기능을, 개발자 B에게는 아이폰의 기능을 구현하라고 지시했을 때, Interface 를 사용하지 않으면 어떻게 될까? 위의 코드를 보면 알겠지만, 갤럭시와 아이폰 모두 동일한 기능을 구현했음에도 메소드의 이름이 다른 것을 확인할 수 있다.
[Network] 1) 기본 지식
모두의 네트워크(미구즈치 카츠야 저)를 읽고 정리한 글입니다. Ch1. 기본 지식 네트워크 관련 아주 기본적인 지식에 대해 다룬다. Network Internet Packet Bit Byte LAN WAN ISP DMZ 1. 네트워크의 구조 Computer Network 두 대 이상의 컴퓨터가 연결되어 필요한 데이터를 서로 주고 받을 수 있는 상태 인터넷은 전 세계에 퍼진 크고 작은 네트워크들을 모두 연결한, 거대한 네트워크 집합체. TCP/IP 프로토콜을 사용한다. Packet 네트워크를 통해 전송되는 데이터의 작은 조각 정보를 주고 받는데는 규칙이 필요하다. 정보는 이진 데이터의 형태로 주고 받아질 것인데, 이러한 것을 어떻게 사람이나 컴퓨터가 인지할 수 있는 형태로 복원시킬지 미리 정해놓아야 소통이 될 것이기 때문이다. 또한 정보는 보낸 순서대로 도착하지 않을 수도 있다. 네
객체지향 설계 원칙 SOLID
SOLID SRP : 단일 책임 원칙 Single responsibility principle 한 클래스는 하나의 책임만 가져야한다. 클래스를 변경하는 이유는 단 하나여야한다. 변경에 따른 파급효과가 적다 OCP : 개방-폐쇄 원칙 Open/closed principle 확장에는 열려있으나, 변경에는 닫혀있어야한다. 다형성을 활용 LSP : 리스코프 치환 원칙 Liskov substitution principle 다형성에서 하위 클래스는 인터페이스 규약을 모두 지켜야한다. 하위 타입 객체는 상위 타입 객체에서 가능한 행위를 수행할 수 있어야 한다. ISP : 인터페이스 분리 원칙 Interface segregation principle 범용 인터페이스를 만드는 것이 아닌, 특정 기능을 위한 인터페이스로 분리하도록 한다. 인터페이스가 명확해지고, 대체 가
Search Process
검색 프로세스는 1991년 Carol Kuhlthau에 의해 처음 제안되었다. 이 사람에 의해 제안된 검색 프로세스는 6단계로 나뉘어져 있는데 단계별 상세 내용은 다음과 같다. 1단계: 시작 정보 탐색자는 과제를 완료하기 위해 새로운 정보가 필요함을 인식한다. 주제에 대해 더 많이 생각할수록 다른 사람들과 주제에 대해 토론하고 주제를 더 자세히 브레인스토밍할 수 있다. 불안과 불확실성으로 가득 차 있는 단계라고 할 수 있다. 2단계: 선택 두 번째 단계인 선택에서는 개인이 조사할 주제와 진행 방법을 결정하기 시작한다. 이 시점에서 일부 정보 검색이 발생할 수 있으며, 그 결과 여러 단계의 쿼리 재구성이 수행된다. 첫 번째 단계와 관련된 불확실성은 종종 주제 선택과 함께 사라지고 낙관적인 느낌으로 대체된다. 3단계: 탐색 탐색에서는 주제에 대한 정보가 수집되고 새로운 개인 지식이 생성된다. 학생들은 새로운 정보를 찾고 주제에 대한 이전 이해 범위 내에서 위치