일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 백준
- GPT
- 백준9095
- 머신러닝
- 논문
- 백준 1916 자바
- 논문구현
- 알렉스넷
- 1916
- 관심사분리
- 1107번
- 백준 1339 자바
- 논문리뷰
- NLP
- dijkstra
- 클린코드
- 짝지어제거하기
- 다익스트라
- 딥러닝
- cs231n
- deeplearning
- MachineLearning
- 백준 1339
- Alexnet
- 자바
- 디미터법칙
- 1261
- 알고리즘
- Java
- 3745
- Today
- Total
목록전체 글 (38)
산 넘어 산 개발일지
코드에도 지켜야 할 형식이 있다. 형식은 어떻게 하면 타인이 보기에 이해하기 쉬울지에 대한 고민에서 시작된다. 아마 클린 코드에 대한 모든 시작점이 이 고민일 것이다. 클린 코드에서의 형식은 보통 위에서 아래로 읽을 때 고차원 -> 저차원 으로 흘러가고, 비슷한 개념을 공유하는 부분끼리는 최대한 붙어 있다. 내 코드 돌아보기 1. 세로 밀집도 onCreateView()라는 함수가 두 함수를 호출하여 사용하는데, 호출하는 함수 다음에 호출을 당하는 함수들이 차례대로 배치가 되어서 쉽게 읽힌다. (종속 함수) 2. 고차원 -> 저차원 밑으로 갈 수록 저차원 함수를 정의하여 세부 동작을 정의했지만 맨 위에서 좀 더 고차원적인 추상화로 설명을 넣어줬으면 좋았을 것 같다. 이 클래스가 어떤 클래스인지 알기 위해서..
"클래스나 모듈은 확장에는 열려 있어야 하고 수정에는 닫혀있어야 한다." 처음에는 이 문장이 이해가 가지 않았다. 확장은 정확히 무엇을 뜻하는 것이고, 수정은 어느 부분을 수정한다는 것인지 모호했다. 가장 간단히 확장과 수정을 구분해보자면, 확장은 클래스나 모듈 외부에서 클래스에 변화를 주는 것이고, 수정은 클래스나 모듈 자체의 코드를 수정함으로써 변화를 주는 것이다. 클래스나 모듈 외부에서 변화를 준다는 말은, 클래스의 내용 자체는 수정하지 않지만 외부에서 입맛에 따라 변화를 준다는 뜻이다. 이를 가능하게 하기 위해선 클래스에서 외부에서 주는 변화요청을 받을 준비가 되어 있어야 한다. 다시말해, 클래스에 대한 수정을 지원할 멤버함수, 멤버변수가 있어야 한다는 것이다. 컴퓨터와 프린터를 통해 예시를 들어..
코드를 하나의 이야기로 풀어간다는 관점에서 봤을 때 함수는 그 이야기 속 하나의 문장이 될 수 있겠다. 즉 클래스, 변수라는 단어들에 대해 함수는 구체적으로 어떤 동작이 이루어지는지를 나타내는 것이다. 따라서 함수를 읽기 쉽게 쓰는 것, 즉 가독성이 높게 쓰는 것이 클린 코드의 첫 걸음일 것이다. 내 코드 돌아보기 함수의 크기 및 추상화 onClick()에서는 추상화 수준을 유지하려는 노력은 보여지진다. 그러나 마지막 if문을 하나의 함수로 표현했다면 더 좋았을 것 같다. checkBlankException() : if문 안을 함수로 표현할 수 있었을 것 같다. function 이름은 checkBlankException이지만 그 안에 구체적으로 View의 내용을 바꾸는 내용이 들어가있으므로 이를 다른 함..
아이디어 💡 주제 : 사회적 약자들이 재능을 살리고 소통할 수 있는 펀딩 마켓 웹 타겟 : 남들에게 선보일 재능이 있는 모든 사회적 약자들 및 이들의 상품 및 서비스를 이용할 고객층 기능 사회적 약자들이 만든 수제 상품이나 강의 서비스를 모아놓고 이를 구매 및 펀딩할 수 있는 마켓 자신의 거주지에 따른 커뮤니티 생성 및 참여 커뮤니티 안에서 진행할 수 있는 단체 펀딩 기술 백엔드 : Django 서버 : 구름 IDE 외부 API : 카카오 맵 API DB : MySQL 느낀점 / 배운점 📝 1. 프로젝트 기획 기획은 팀원들 모두와 같이 만드는게 좋을 것 같다. 왜냐하면 기획을 같이 짜봄으로써 전체 프로세스가 어떻게 돌아가는지 파악하게 되고 자신이 무엇을 만들고 이게 어떻게 작동될 것인지를 더 쉽고 빠르게..
서비스(외부객체)를 선언하고 이에 대한 실제 정의는 외부에서 주입하는 것을 의존성 주입이라 한다. 즉 외부 객체를 사용함으로써 의존성이 생기고 이에 대한 정의나 생성은 외부에 위임하는 것이다. (제어 역전) 이를 통해 클라이언트 코드는 객체에 대한 정의나 생성에 관하여 일절 관여할 필요가 없어진다. 서비스가 인터페이스를 구현한 객체라면 더 좋다. 추상화가 갖추어지고 클라이언트는 서비스의 인터페이스를 통해 어떤 기능이 있는지만 파악할 수 있기 때문이다. 또한 클라이언트는 서비스의 실제 객체에 대한 구체적인 내용은 모르게 된다.
우리는 평소 코딩을 할 때 라이브러리에서 가져온 코드를 가져와서 사용한다. 이처럼 라이브러리는 우리가 제어권을 가지고 호출해서 사용하는 대상이다. 제어역전은 우리의 제어권을 외부에 넘겨주고 외부에서 우리 코드르 호출하게 하는 방식이다. 대표적인 예가 바로 프레임워크다. 프레임워크는 이미 다른 개발자들에 의해 수많은 코드, 특히 추상 클래스와 인터페이스들로 구현되어 있고 이를 사용하는 방법도 정해져 있다. 이를 사용하는 개발자들은 그저 이 방법을 익히고 프레임워크에서 만들어져 있는 클래스를 상속하거나 인터페이스를 구현함으로써 프레임워크의 틀에 맞게 작동시킨다. 여기서 중요한 점은 우리가 프레임워크의 코드를 호출하는 것이 아니라 프레임워크가 우리의 코드를 호출해서 사용한다는 것이다. 즉 제어권이 우리가 아닌..
문제점 모든 코드에서 원하는 클래스에 대한 객체를 만들 수 있겠지만 이 경우 원하는 클래스가 어떻게 동작하는지, 생성하기 위해 무엇이 필요한지를 클라이언트 코드가 일일이 파악해야 한다. 이 경우 다른 클래스에 대한 정보를 구체적으로 알게 된다는 점에서 캡슐화 원칙이 지켜지지 않는다. 또한 클라이언트 코드가 클래스에 대한 정보를 가지고 있어야 한다는 부담도 생긴다. 팩토리 메서드 패턴(Factory Method Pattern) 클래스의 객체를 만드는 일 자체를 Factory에 위임한다. 이 때 클라이언트 코드에서 넘겨주는 조건에 따라 원하는 객체를 반환하는 것이다. 팩토리 메서드 패턴에서 조건으로 인한 분기점은 마지막 가장 작은 단위의 클래스를 만드는 시점이 된다. ex) 라면공장 고객(Client)이 라..