본문 바로가기

객체지향

(7)
객체지향 생활체조 http://www.yes24.com/Product/Goods/3290339 소트웍스 앤솔러지라는 도서에는 나오는 객체지향적인 코드를 위한 현실적인 실현방법이 소개된다. 1. 한 메서드에 오직 한 단계의 들여쓰기만 한다. for, if, while 등등 한번 들어가면 한단계의 들여쓰기이다. for문 안에 if문이 들어가면 2단계의 들여쓰기가 된다. 2. else 키워드를 쓰지 마라. else를 이용한 분기처리는 가독성에 좋지 않다. else에서 어떤일을 하는지 코드에서 한눈에 보기 힘들기 때문이다. 또한 else문이 중첩되면, 아주 좋지않은 코드가 나온다. 대안: 1. early return으로 뒤의 코드를 보지 않고 결과를 바로 리턴하는 방법 2. 전략패턴(다형성)(아직 잘 모름) 3. 모든 원시값과 ..
의미있는 객체 이름 붙이기 1. 길어도 상관없다. 의도를 분명히 밝힌다. 어떤 것으로 어떤 일을 하고 어떤 결과를 내는 것인지 처럼 최대한 의도를 밝힌다. 일반적으로 변수 이름의 길이가 평균 10~16일 때 프로그램을 디버깅하기 위해서 들이는 노력을 최소화 할 수 있고, 변수의 평균 길이가 8~20인 프로그램은 디버깅하기가 쉽다 2. 헷갈리게 하지 않는다. 정말 리스트의 뜻이 아니라면, List와 같은 단어를 접두어에 붙여서 헷갈리게 하지 않는다. 약어를 쓰지 않는다. 3. 불용어를 쓰지 않는다. a, an, Info, Data, the, 단순한 숫자 추가 등을 하지 않는다. 4. 발음 하기 쉬운 단어를 사용한다. 코드를 보는 사람이 술술 읽히는 코드를 작성하기 위해 노력한다. 5. 한 개념에 한 단어를 사용하라. 한 클래스에서 ..
데이터 유효성 체크 자동차 경주 게임을 처음 구현할 때, 데이터를 받아 들이는 InputView 에서 모든 유효성을 검사했었다. 고민 끝에 다음은 이름을 저장하는 Name클래스에 다시 모두 옮겼었다. 객체 지향적인 설계를 공부하면서 이게 맞을까 라는 생각이 들어서 했던 고민에 대한 결론을 정리해본다. 데이터 유효성 체크도 객체의 역할이라고 생각했다. 예를 들어 [공백을 입력받으면 안됨] [이름이 5자가 넘으면 안됨] [마지막에 쉼표가 있으면 안됨] [이름은 한명만 있으면 안됨] 이라는 유효성 체크를 해야 한다면, [공백을 입력받으면 안됨] [마지막에 쉼표가 있으면 안됨] 은 입력받는 InputView 에서 처리해야 한다. 왜냐면 이름을 저장할 때 생기는 예외라기 보다는 입력 그 자체에서 생기는 예외니까. [이름이 5자가 넘..
좋은 객체란 무엇일까 클래스와 메소드를 최소한의 역할로 구분해야 한다 -> 적절한 책임과 역할의 분배가 필요하다 -> 객체지향적인 설계란 뭘까? -> 좋은 객체를 구성하려면 어떻게 해야할까? 라는 생각에 도달했다. 그래서 좋은 객체가 뭔지 찾아보았다. 이 또한 정답이 있지않은 논쟁이 될 만한 부분들이 많지만, 확실한 건 고민없이 그냥 쓰는 사람보단 이 글을 읽은 내가 낫다는 것이다. 출처 : https://codingnuri.com/seven-virtues-of-good-object/ 출처의 출처 : https://www.yegor256.com/2014/11/20/seven-virtues-of-good-object.html 1. 객체는 생명체이다. 객체는 생명체이다. 객체는 속성(상태, 특징)과 행위(행동, 동작, 기능)을 ..
객체 지향 도메인모델링 우아한 테크코스 프리코스 미션의 요구사항 중 1. 들여쓰기 depth는 2까지 허용 2. 메소드가 한가지의 일만 하도록 설계 3. 클래스를 분리하는 연습 의 조건이 있었다. 이 세가지의 조건을 보고 이건 하나의 조건이라 생각하였다. (뇌피셜임) 이전에 포스팅을 하면서 공부했던 타이트한 객체지향적인 설계를 하라는 뜻이 아닐까. 각 객체가 하나의 책임을 가지고, 그 책임을 지는 과정의 행동마다 모두 메소드로 정의하라는 것 아닐까. 앞의 글에서 우아한 형제들의 글을 읽고 나름 정리를 해 보았지만 Okky에서 fender님의 글을 읽고 객체지향 도메인을 구상하는 방법을 공부해봤다. 물론 이번 글도 Okky에서 객체지향에 대한 글을 뒤지다 발견한 글을 읽고 생각하고 정리한 글이다. 작성자님의 의도를 100%이해한..
안티 패턴 (내 생각 포함) 프로그래밍 안티패턴이란 문제에 대해 자주 사용되는 프로그래밍 패턴이지만, 잘 모르고 무작정 쓰면 안좋은 결과를 가져오는 것을 말한다. http://en.wikipedia.org/wiki/Anti-pattern#Programming_anti-patterns 위키백과에서 안티패턴의 여러가지 종류를 볼 수 있고 이 중 내가 범하고 있던 몇가지를 기억하여 다음부터는 내 코딩을 개선하려 한다. 나처럼 어디서 본 건 있어서 무작정 장단점을 알지 못하고 쓰거나, 패턴을 알맞지 않은 곳에서 써서 발생할 수 있는 문제이다. 우테코 미션에서 내가 범했다고 생각하는 안티 패턴들을 적어보겠다... (ㅠ) 화물숭배 프로그래밍 (Cargo cult Programming) 프로그래밍 패턴에는 여러가지가 있다. 디자인 패턴에는 팩토..
객체 지향적으로 설계하고 구현하는 것이란 woowabros.github.io/study/2016/07/07/think_object_oriented.html 생각하라, 객체지향처럼 - 우아한형제들 기술 블로그 2년차 쪼랩이가 객체지향을 처음으로 접하고 공부를 하면서 나름대로 정리해보았습니다. woowabros.github.io 이글은 위의 우아한 형제들 기술 블로그의 김승영님의 글을 읽고 공부한 글입니다. 저만을 위해 쓴 글이기 때문에 객체지향에 대해 알고 싶어서 오신 분이라면 위의 블로그를 들어가서 정독하시는 것을 추천드립니다. 1. 도메인 구상하기 도메인은 본래 범위, 영토 라는 뜻을 가진다. 사용자들이 관심을 가지고 있는 특정 분야나 주제를 말하며 소프트웨어는 도메인에 존재하는 문제를 해결하기 위해 개발된다. 1-1. 객체 생각하기 도메인에..