에러 해결하는 데 시간을 많이 보낸 하루였다. 프론트엔드와 socket연결이 잘 됐는데 갑자기 프론트에서 아예 연결이 안 돼서 해결하는 데 시간을 많이 썼다. 결론은 CORS 문제였는데 구글링을 통해 간단히 해결할 수 있었다. 하나를 수정하고 바로 맞춰보고 했어야 했는데 구글링하며 여러개를 수정하고 맞춰보고 하다 보니 해결하는 데 시간이 걸렸다. 그리고 프론트에서의 문제인지 백엔드에서의 문제인지를 정확하게 알 수 없으니 내 코드가 맞았는데 수정을 하고 결국 더 꼬이게 됐다.
원인을 정확하게 분석하지 못하고 일단 에러 메세지를 해결해야 해서 그런 걸까 싶기도 하다.
다음부터는 잠시라도 시간을 내서 원인이 뭘까 생각하고 가설을 세워 해결해 나가야겠다.
프로그래밍 패러다임
프로그래밍을 하는 여러가지 방식, 스타일 중의 하나
객체들을 컨셉으로 해서 프로그래밍을 해나가는 방식
절차지향 프로그래밍 - 어플리케이션이 동작하기 위한 데이터와 함수들 위주로 구성하는 것
정의된 순서대로 절차대로 함수가 하나씩 호출하는 이것을 절차지향 프로그래밍이라고 한다.
이것의 단점은 하나를 수정하기 위해서는 전체적인 어플리케이션이 어떻게 동작하는지 잘 이해해야한다.
하나를 수정했을 때 다른 곳에 영향을 끼치기 쉽고 한눈에 어플리케이션을 이해하기도 어렵다.
유지보수, 확장성에서 안좋다.
객체지향 프로그래밍 - 프로그램을 객체로 정의해서 객체들끼리 서로 의사소통하도록 디자인하고 코딩해 나가는 것을 말한다. 서로 관련있는 데이터와 함수를 여러가지 오브젝트로 정의해서 프로그래밍해나가는 것을 말한다. 객체지향은 오브젝트 단위로 만들어 나가기 때문에 한 곳에서 문제가 생긴다면 관련있는 오브젝트만 수정하면 된다. 또 여러번 반복되는 것이 있다면 관련된 오브젝트를 재사용할 수 있다.
오브젝트에는 오브젝트의 속성을 가지고 있는 데이터와 행동을 할 수 있는 함수로 구성이 돼 있다.
클래스는 데이터가 들어있지 않은 템플릿 같은 아이
실제로 이 클래스에 데이터를 넣어 만드는 것이 오브젝트이다. 오브젝트는 클래스의 instance이다.
Encapsulation(캡슐화)
Abstraction(추상성)
Inheritance(상속)
Polymorphism(다형성)
관련 있는 데이터와 함수를 묶는게 캡슐화이다.
관련 있는 데이터와 함수를 한 오브젝트에 담아두고 외부에서 보일 필요가 없는 데이터를 잘 숨겨 놓음으로써 캡슐화를 할 수 있다.
OOP의 첫 출발 점으로 어떤 데이터와 함수를 묶을 건지, 어떤 걸 외부에서 보이게 하고 안보이게하고를 정하는 것으로 할 수 있다.
추상성은 내부의 복잡한 기능을 다 이해하지 않고 외부에서 간단한 인터페이스를 통해서 쓸 수 있는 것을 말한다.
예를 들어 커피머신이 있으면 커피머신이 어떻게 동작하는지 내부 동작원리를 모르더라도 간단한 버튼만 누르면 쓸 수 있다.
이처럼 추상화를 통해서 외부에서는 내부에서 어떻게 구현돼 있는지 얼마나 복잡한지 이런 것들을 신경쓰지 않고 지정된, 외부에서만 보이는 인터페이스, 함수를 통해서 오브젝트를 사용할 수 있다.
상속을 이용하면 잘 만들어진 예로들면 커피머신을 가져와서 내가 필요한 기능을 더해서 다른 종류의 커피 머신을 만들 수 있다. 또 다른 커피 머신도 쉽게 만들 수 있다.
상속의 관계는 parent class와 child class로 나눠 부를 수도 있고 또는 super class와 sub class로도 말 할수 있다.
상속을 받은 자식 클래스는 부모 클래스라고 말할 수 있다. 예로 들면 동물 클래스의 자식 클래스가 개 클래스이면 개는 동물이다라고 말할 수 있다.
Poly(many)+morphi(form)
다형성은 상속을 통해 만들어진 예로 들어 강아지, 고양이, 돼지를 어떤 종류의 동물인지 상관하지 않고 부모 클래스 동물 클래스에 정의 된 함수를 공통적으로 호출 할 수 있다.
자식 클래스는 어떤 종류에 상관없이 부모 클래스의 함수를 호출 할 수 있다.