나의 개발일지

기술 면접 준비 - CS 공부 본문

면접준비

기술 면접 준비 - CS 공부

heew0n 2024. 3. 19. 22:40

TCP와 UDP의 차이점

 

연결 지향성:
TCP(Transmission Control Protocol): 연결 지향적인 프로토콜로, 통신하기 전에 연결을 설정하고, 통신이 끝나면 연결을 해제한다. 이는 데이터를 신뢰성 있게 전송하고 수신 확인을 통해 데이터 손실을 방지한다.
UDP(User Datagram Protocol): 비연결 지향적인 프로토콜로, 데이터를 전송하기 전에 연결을 설정하지 않는다. 따라서 속도가 빠르지만, 데이터 전송 중 손실이 발생할 수 있다.


신뢰성:
TCP: 데이터 전송 중에 손실이나 오류가 발생하면 재전송을 통해 신뢰성 있는 데이터 전송을 보장한다.
UDP: 데이터 전송 중에 오류가 발생하더라도 재전송을 하지 않는다. 따라서 손실이나 오류가 발생할 수 있다.


헤더 크기:
TCP: 헤더 크기가 크며, 연결 설정, 순서 관리, 오류 제어 등의 기능을 제공하기 때문에 상대적으로 오버헤드가 크다.
UDP: 헤더 크기가 작으며, 단순한 데이터 전송만을 위한 프로토콜이므로 TCP보다 오버헤드가 적다.


사용되는 애플리케이션:
TCP: 웹 브라우징, 이메일, 파일 전송 등 신뢰성이 중요한 애플리케이션에서 주로 사용된다.
UDP: 스트리밍 서비스, DNS 조회, 온라인 게임 등 속도가 중요한 실시간 응용 프로그램에서 주로 사용된다.

 그래서 일반적인 경우, TCP를 사용하고 데이터가 유실되더라도 실시간성이 중요한 스트리밍방송, 통화 등에서는 UDP를 사용한다.

 

 


 

프레임워크와 라이브러리

 

프레임워크(Framework)란?

  • 개발자가 소프트웨어를 개발함에 있어 코드를 구현하는 개발 시간을 줄이고,  코드의 재사용성을  증가 시키기 위해 일련의 클래스 묶음이나 뼈대, 틀을 라이브러리 형태로 제공되는 것을 말한다.
  • 제어의 역전 개념이 적용된 대표적인 기술이다.

 

   1) 프레임워크의 특징

  • 개발자가 따라야 하는 가이드를 제공한다.
  • 개발할 수 있는 범위가 정해져있다.
  • 개발자를 위한 다양한 도구 , 플로그인들을 지원한다.\

   2) 프레임워크의 장단점

장점
  • 개발 시간을 줄일 수 있음
  • 정형화 되어 있어 일정수준 이상의 품질을 기대할 수 있음
  • 유지 보수가 쉬움
단점
  • 너무 의존하면 개발자들의 능력이 떨어져서 스스로 직접 개발하는 것이 어려워짐
  • 습득에 걸리는 시간이 오래 걸림

 

라이브러리(Library)란?

  • 라이브러리란 개발자가 만든 클래스들의 나열로, 다른 프로그램들에서 사용할 수 있도록 제공하는 방식이다.

 

프레임워크(Framework)와 라이브러리(Library)의 차이점

   즉, 애플리케이션의 Flow(흐름)을 누가 쥐고 있느냐에 달려있다.

  • 프레임워크는 그 스스로 제어 흐름의 주도성을 갖는 반면, 라이브러리는 개발자가 가지고 있다.
  • 프레임워크는 집이고, 라이브러리는 그 집 안의 가구이다.
  • 라이브러리와 달리 프레임워크는 이미 프로그래밍에 대한 규칙을 가지고 있다. 예를 들면 설정파일의 태그설정이나, DB연동 방법등에 대한 규칙을 가지고 있고 개발자는 이를 따라야한다.

라이브러리와 프레임워크의 차이는 제어 흐름에 대한 주도성이 누구에게 / 어디에게 있는가에 있다.

 

 


 

OOP (Object Oriented Programming)란 무엇인가요?

참고한 벨로그 : 

https://velog.io/@hkoo9329/OOPObject-Oriented-Programming-%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%9D%B4%EB%9E%80

 

OOP(Object-Oriented Programming, 객체 지향 프로그래밍) 이란?

OOP란 무엇인가? OOP (Object-Oriented Programming)이란 객체 지향적인 프로그래밍. 즉, C언어같은 절차 지향적인 프로그래밍이 아닌 객체의 관점에서 프로그래밍을 한다는 것이다. OOP는 객체를 기준으로

velog.io

 

  • 많은 객체(Objcet)들이 모여서 상호 협력하면서 메시지를 주고 받으며 데이터를 처리하는 방식의 현실세계의 패러다임을 접목한 프로그래밍 방법이다.
  • 다형성을 통해 레고 블럭 조립하듯이 컴포넌트를 유연하고 변경이 용이하기 때문에 대규모 소프트웨어 개발에 많이 사용된다.
  • 대표적으로 많이 알려진 Java언어를 포함하여 Ruby Python, C++, Objectivc-C, C#, Kotlin 등이 모두 객체지향 요소를 가진 언어다.

객체지향의 특징

  • 캡슐화 : 접근제어 지시자를 통한 정보 은닉 ( public > protected > default > private )을 통해 여러가지 형태의 객체를 디자인 >  ex) 싱글톤
  • 상속 : 상위 클래스의 특징을 하위클래스에서 상속받아 코드의 중복 제거, 코드 재사용성 증대
  • 추상화 : 모델링개념. 클래스 설계를 할때  공통적으로 묶일 수 있는 기능은 추상화 > 추상클래스 > 인터페이스 모델링해서 향후 다형성으로 확장할 수 있도록 설계
  • 다형성  : OOP의 OOP답게 만들어 주는 가장 큰 특징
    • 다형성을 통해 역할과(인터페이스) 구현을 분리해서 오버라이딩을 통해 서비스의 구현기능을 유연하게 변경, 확장이 가능
    • 특히 스프링같은 DI컨테이너를 이용하면 다형성을 극대화 하여 OCP,DIP 설계 원칙을 잘 지키면서도 구현체를 편리하게 변경,확장이 가능