객체 지향 프로그래밍(OOP)의 개념과 배경
- 프로그램을 '객체(Object)'라는 기본 단위로 나누고, 이들의 상호작용으로 서술하는 방식
객체는 구체적인 역할을 지닌 '메서드'와 '필드'의 묶음으로 구성된다 - JAVA가 객체지향의 대표 언어이나, JAVA만이 객체지향 언어인 것은 아니며 객체가 곧 class인 것도 아니다.
(JS는 class 대신 프로토타입을 사용) - 배경 및 효과 : 코드의 중복 방지, 코드의 역할 및 용도 명확화
등장 배경
· 절차적 프로그래밍 : 초기의 프로그래밍
프로그래밍은 단순한 명령어의 모음.
프로그램의 기능에만 신경을 썼을 뿐, 프로그램이 취급하는 데이터에 대해서는 무관심
코드가 복잡해지는 경우 유지보수가 곤란하고 중복코드가 생성되는 문제 발생
↓
· 구조적 프로그래밍 : 프로시저 개념
프로그램을 프로시저 라는 단위로 나누고, 프로시저 끼리 호출을 하는 '구조적 프로그래밍'을 도입
프로그램이라는 큰 문제를 작은 문제들로 나누어 해결 하기에 하향식 프로그래밍 이라고도 할 수 있음
(프로시저 : 수행되어야 할 연속적인 계산 과정의 단위, 메서드 혹은 함수와 비슷한 뉘앙스)
But, 프로시저를 통해 데이터 처리 방법을 구조화 할 수 있었으나, 데이터 그 자체를 구조화 할 수는 없었다.
또한 수많은 프로시저가 난립함으로서 네임스페이스가 포화되는 문제, 실행 콘텍스트를 저장할 방법이 없는 한계가 존재
↓
· 객체 지향 프로그래밍 : 상향식 프로그래밍
프로그램이라는 큰 문제를 작은 문제로 쪼개는 것이 아니라, 먼저 작은 문제를 해결하기 위한 객체를 만들어두고 객체의 조합으로 큰 문제를 해결하는 상향식 해결법을 도입. 각 객체는 명확한 기능을 가지고 있기에 코드의 명확성을 높여주며, 재사용이 가능하여 중복코드로 인한 문제도 해결하게 됨
CLI가 지배하던 시절에는 크게 주목받지 못했으나, GUI가 등장하면서 그 효용성이 알려졌다.
기존 CLI기반 프로그램에서는 사용자가 한 화면에서 하나의 기능만을 컨트롤 하지만, GUI 프로그램에서는 화면 위에 여러 기능이 동시에 존재하고 이들 각각이 서로 다른 실행 컨텍스트(문맥)을 가지기에 절차적 프로그래밍에서는 이벤트에 대한 효율적인 코드 작성이 곤란했기 때문..
반면 OOP에서는 이벤트에 대응하는 기능을 객체로 구현하고, 특정 이벤트 발생시 이를 실행하도록 설계함으로서 위와 같은 문제를 해결할 수 있었다(단, 이러한 이벤트 드리븐 구조가 OOP의 고유한 장점은 아니다.. 예시 일 뿐)
클래스와 객체, 인스턴스
- 클래스(Class) : 객체를 생성하기 위한 설계도, OOP에서 타입(단위)의 역할을 하게됨
각 객체는 속성(필드)과 동작(메서드)으로 구성된다 - 객체(Object) & 인스턴스(Instance) :
설계도를 바탕으로 선언(생성·구현)되어 별개의 데이터로 식별 가능하게 된 단위
본질은 같으나 통상적으로 객체는 프로그래밍 단계에서 통용되는 용어이고, 프로그램이 실행 될 때 객체가 메모리 안에 존재하는 상태가 된 것을 인스턴스라고 한다.
(JAVA에서 모든 클래스의 최상위 클래스인 Object는 여기서의 객체(Object)와 다른 의미이며, 구분을 위해 JAVA에서는 Instance라는 표현을 공식적으로 사용하기도 함) - 다시 말해,
객체의 클래스란? : 객체가 구현된 방식, 구조를 의미
객체의 타입이란? : 어떤 객체임을 나타낼 수 있는 표현 방식을 의미.
하나의 객체가 여러 타입으로 표현될 수도 있고, 여러개의 클래스라도 하나의 타입으로 갈무리 될 수 있다.
디자인 패턴
디자인 패턴이란?
- 프로그래밍 과정에서 발생할 수 있는 이슈들을 정형화하여 개념 및 접근 방법을 제시하도록 한 약속
- 어떤 귄위를 가지거나 강제성이 있는 것은 아니지만 디자인 패턴을 따름으로서 코드 작성 및 유지보수를 편리하게 함
MVC 패턴 (Model - View - Controller)
- 개 념 : 어플리케이션을 Model - View - Controller의 상호작용으로 설계하는 것
- 장 점 : 각 컴포넌트는 맡은 역할만을 수행하기에 명확하고 유연한 코드 작성이 가능해진다
- Model : 데이터 관리를 담당하는 컴포넌트
1. 필요한 모든 데이를 가지고 있어야 한다
2. 뷰, 컨트롤러에 대한 정보는 갖고 있지 않아야 한다
3. 데이터 변경 요청이 발생 할 경우 이를 처리하는 로직을 가져야 한다 - View : 사용자 인터페이스를 담당하는 컴포넌트
1. 모델이 가진 정보를 따로 저장해서는 안된다
2. 모델, 컨트롤러에 대한 정보는 갖고 있지 않아야 한다
3. 화면 변경 요청이 발생 할 경우 이를 처리하는 로직을 가져야 한다 - Controller : 데이터와 사용자 사이에서 이벤트를 처리를 담당하는 컴포넌트
1. 모델이나 뷰에 대해서 알고있어야 한다
2. 모델이나 뷰의 변경 내용을 모니터링 해야 한다
GET, POST의 차이
- GET : 서버에 어떤 리소스를 요청 하기 위해 사용되며 URL에 쿼리스트링을 붙이는 방식으로 요청 정보를 담는다
GET방식은 요청 기록이 남고 캐시될 수 있기에 보안에 취약하다
요청에 길이 제한이 있다 - POST : 서버의 리소스를 생성하거나 수정하기 위한 요청을 보내기 위해 사용되며 HTTP 메시지 안에 요청내용이 담겨지기에 겉으로 드러나지 않으나, 개발자 도구 등으로 확인은 가능하다. 다만 암호화를 통해 보안을 강화할 수 있다.
요청에 길이 제한이 없으며 캐시되거나 기록이 남지 않는다
스프링과 스프링부트
- 스프링 : 자바 기반의 웹어플리케이션을 만들 때 사용하는 프레임워크
- 특징 :
제어의 역전(IOC) - 객체의 생성과 사용을 스프링에게 맡김
의존성 주입(DI) - 한 객체가 의존성을 갖는 다른 객체를 직접 생성하도록 하는 것이 아니라, 외부의 관리자에게 맡기는 것
-> 객체의 유연한 사용, 테스트 용이, 객체간 결합도 하락 - 스프링부터 : 스프링 사용시 필요한 설정등을 자동화한 것
ETC
- private, 캡슐화
객체지향언어는 객체의 상호작용으로 프로그램을 구성하는데, 각 역할이나 기능에 따라 클래스를 분리하는 것을 캡슐화라함. 중복코드 방지 및 재사용성이 높아지는 이점
private 접근제어자는 외부에서 해당 클래스의 데이터에 직접 접근하는 것을 막기 위함
'Memo' 카테고리의 다른 글
[Memo] 자기계발 (0) | 2023.12.17 |
---|---|
[NETWORK] 모든 개발자를 위한 HTTP 웹 기본 지식 (인프런 김영한) (0) | 2023.05.05 |
[PROJECT] 팀 프로젝트 '가보자고' 소개 및 기능 시연 (0) | 2023.04.27 |
캔버스기능구상 (0) | 2023.03.23 |
배포방법 고민 (0) | 2023.03.14 |