'OOP' 카테고리의 글 목록
본문 바로가기
728x90

OOP10

[OOP] 객체 지향 개념 이 글은 https://youtu.be/CXuA31XcBZ0 를 통해 개념 정리 후 복습용으로 정리한 글입니다. 문제시 바로 삭제하겠습니다. 객체 지향 개념 클래스와 객체 클래스 정의 클래스란 객체를 정의해 놓은 것 용도 클래스는 객체를 생성하는 데 사용 객체 정의 실제로 존재하는 것, 사물 또는 개념 용도 객체가 가지고 있는 기능과 속성에 따라 다름 클래스 객체 제품 설계도 제품 TV 설계도 TV 객체의 구성요소 - 속성과 기능 객체 = 속성(변수) + 기능(메서드) TV 속성(변수) 크기, 길이, 높이, 색상, 볼륨, 채널 등 기능(메서드) 켜기, 끄기, 볼륨 높이기, 볼륨 낮추기, 채널 변경하기 등 //TV 설계도 Class tv { String color: //색깔 boolean power; //.. 2022. 12. 22.
[객체지향 생활체조 원칙] 규칙 9. getter/setter/프로퍼티를 쓰지 않는다. getter/setter/프로퍼티를 쓰지 않는다. Entity에서 getter/setter 사용을 지양해 상태 노출을 최소화 객체의 상태를 가져오는 접근자를 사용하는 것은 괜찮지만, getter/setter를 사용해 객체 바깥에서 그 결괏값을 사용해 객체에 관한 결정을 내리는 것은 안 된다. 한 객체의 상태에 관한 결정은 어떤 것이든 그 객체 안에서만 이루어져야 한다. 즉, 객체에 메시지를 던져서 작업해야한다. 또한, getter/setter를 사용하게 되면 Open/Closed 원칙을 위반하게 된다. public class Product { ​ private final Name name; private final Count count; ​ public Jamie(Name name, Count count.. 2022. 11. 7.
[객체지향 생활체조 원칙] 규칙 8. 일급 컬렉션을 쓴다. 일급 컬렉션을 쓴다. First Class Collection : Collection을 Wrapping하면서, 그 외 다른 변수가 없는 클래스의 상태를 일급 컬렉션이라 한다. Object나 Array를 Class로 포장한다는 의미 장점 해당 컬렉션에서 필요한 모든 로직은 일급 컬렉션에서 구현. 즉, 비지니스에 종속적인 자료 구조가 만들어진다. 컬렉션을 불변성이 보장된 불변객체로 만들 수 있다. setter을 이용하지 않고 기존 컬렉션 메서드를 이용해 임의로 컬렉션 내용 변경할 수 있다. 상태와 행위를 한곳에서 관리할 수 있다. 응집도를 높이고 결합도를 낮출 수 있다. https://iyk2h.tistory.com/272 [Java] 일급 컬렉션(First Class Collection)이란? 일급 컬렉션.. 2022. 11. 7.
[객체지향 생활체조 원칙] 규칙 7. 2개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다. 2개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다. 이번 규칙은 3번 규칙과 비슷한 의미를 가진다. Class Name { String first; String middle; String last; } Class Name { Surname family; GivenNames given; } Class Surname{ String first; } Class GivenNames{ List names; } GivenNames 클래스에 이름 목록을 만들면, middle, last 또 추가되는 이름값을 받을 수 있게된다. 기존에 3개의 인스턴스를 관리했지만 GivenNames을 만듬으로써 2개의 인스턴스를 관리할 수 있게 되었다. 사실 예제가 이름이라 크게 변화된게 없는데 차로 예를 들면 계층 구조를 가지며 .. 2022. 11. 7.
[객체지향 생활체조 원칙] 규칙 6. 모든 엔티티를 작게 유지한다 모든 엔티티를 작게 유지한다. 50줄 이하의 클래스 10개 이하의 파일을 갖는 패키지 단일 책임 원칙과 같은 의미로 엔티티를 작성할 때 하나의 목적을 두고 설계해야 한다. 클래스의 크기를 줄여 분리하면, 하나의 목적을 가진 역할을 하게 된다. 이러한 클래스들을 모아 패키지를 구성하면 된다. 패키지도 클래스처럼 응집력 있고 단일한 목표가 있게 된다. 패키지를 작게 유지함으로써 패키지 자체로 정체성을 지닐 수 있게 된다. 즉, 객체지향 프로그래밍에서는 클래스, 메서드, 패키지든 단일 책임 원칙을 위반하지 않았는지 확인해볼 필요가 있다. 2022. 11. 7.
[객체지향 생활체조 원칙] 규칙 5. 줄여 쓰지 않는다(축약 금지). 줄여 쓰지 않는다. 명명시에 축약을 하지 말자 이번 규칙은 우선적으로 "왜 줄이려고 하는가?" 에대한 질문에서 시작 할 수있다. 메서드의 이름이 긴 이유 중 하나는, 책임을 너무 많이 갖고 있거나, 적절한 클래스의 아래에 위치하지 않아서 일 수 있다. 책임을 너무 많이 가지고 있다면 설계를 다시 고민해야한다. 매소드를 쪼개 단순화 하여야한다. public void example() { User user = new user(); user.updateNameAndAge("새로운이름", 20); } public void example() { User user = new user(); user.updateName("새로운이름"); user.AndAge(20); } 기능을 분리해줌으로써 메서드 이름도 분리해 줄 .. 2022. 11. 7.
[객체지향 생활체조 원칙] 규칙 4. 한 줄에 점을 하나만 찍는다. 한 줄에 점을 하나만 찍는다. 디미터(Demeter)의 법칙 : "친구하고만 대화하라" "자기 소유의 장난감, 자기가 만든 장난감, 그리고 누군가 자기에게 준 장난감하고만 놀 수 있다. 하지만 절대 장난감의 장난감과 놀면 안 된다." 그렇지 않을 경우, 다른 객체에 너무 깊숙이 관여하게 된다. 이는 캡슐화를 어기는 것이다. 즉, 한 객체가 너무 먼 객체를 불러와서 사용하는 것을 지양해야 한다. 코드를 작성할 때 한 라인에 점이 여러 개 생기면 대상 객체의 내부에 깊이 접근할 수 있다는 의미이고, 이는 강한 결합도가 형성되어있다는 것을 뜻하게 된다. 설계에 대한 고민을 해봐야 한다. class Location { public Piece current; } ​ class Piece { public Strin.. 2022. 11. 7.
[객체지향 생활체조 원칙] 규칙 3. 모든 원시 값과 문자열을 포장한다. 모든 원시 값과 문자열을 포장한다. byte, int, long, String, char 과 같은 원시 타입, 문자열 변수를 객체로 포장해 사용하라. 포장한 객체로라면 아주 사소하더라도 컴파일러와 개발자에게 해당 값이 어떤 값이며 왜 쓰는지에 대해 정보를 전달할 수 있다. 이에 따라 단순히 값을 나타내는 것뿐 아니라, 비즈니스적인 의미를 함께 표현해준다. public class SingUp { ​ private static final int MIN_AGE = 19; ​ public void checkUserAge(int age) { ​ if (age < MIN_AGE) { throw new IllegalArgumentException("가입 가능 나이는 " + MIN_AGE + " 살 이상이어야 합니다... 2022. 11. 7.
[객체지향 생활체조 원칙] 규칙 2. else 예약어를 쓰지 않는다. else 예약어를 쓰지 않는다. else 예약어를 사용하지 않고 코드를 작성해보라. switch/case 문을 사용하는 것도 허용하지 않는다. 이번 원칙의 목적은 한 메소드에서 발생하는 분기 문을 줄이자는 것이다. 분기 문을 많이 가지고 있는 메소드는 많은 기능이 있을 확률이 높다. 아래 성적 처리를 보자 public static void getGrade(Int score) { if (score >= 95) { grade = "A+"; } else if (score >= 90) { grade = "A0"; } else if (score >= 85) { grade = "B+"; } else if (score >= 80) { grade = "B0"; } else { grade = "C"; } System.o.. 2022. 11. 6.
[객체지향 생활체조 원칙] 규칙 1. 한 메서드에 오직 한 단계의 들여 쓰기만 한다. 한 메서드에 오직 한 단계의 들여 쓰기만 한다. for 또는 while 반목문 안에 if문이 있으면 들여 쓰기가 두 단계가 된다. 정확히 한 가지 일을 하는 메서드들로 작업을 하면 코드가 달라지기 시작한다. 애플리케이션의 각 단위가 더 작아짐에 따라 재사용의 수준은 기하급수적으로 상승하기 시작한다. 인용 : https://developerfarm.wordpress.com/2012/01/26/object_calisthenics_2/ 아래 구구단을 보자 public static void TimesTable(String[] args) { for (int i = 2; i < 10; i++) { System.out.println(i + "단을 출력 합니다."); for (int j = 1; j < 10; j++).. 2022. 11. 5.
728x90