SlideShare una empresa de Scribd logo
1 de 15
Descargar para leer sin conexión
클래스


      박기덕
목차

1. 클래스 체계

2. 클래스 규모

3. SRP

4. 응집도

5. 변경하기 쉬운 클래스
1. 클래스 체계
● 클래스를 정의하는 표준 자바 관례




● 변수와 유틸리티 함수는 가능한 공개하지 않는편이 좋지
  만 반드시 숨겨야 할 법칙은 없다. (Test Code 작성을 위
  한 protected 등)
2. 클래스 규모

 70여개의 공
 개 메소드로
 이루어진
 Class
              .
              .
              .




위의 함수를 5개
의 메소드로 줄
이면 작은 Class
인가??
2. 클래스 규모

● 클래스를 설계할때도 함수와 마찬가지로 '작
  게'가 기본 규칙 이다.

● 클래스의 책임이 작을 때 클래스는 '작게' 된
  다.

● 클래스의 작명이 클래스 크기를 줄인다.

● 클래스 이름에 연결구를 사용하지 않으며, 25
  단어 내외로 작명한다.
3. SRP
● SRP(Single Responsibility Principle) 이란 클
  래스를 변경하는 이유가 오직 하나뿐이어야
  한다는 원칙

● SRP는 객체 지향 설계에 중요한 개념

● "돌아가는 소프트웨어" & "깨끗하고 체계적인
  소프트웨어"
3. SRP
● 여행가서 찍은 사진을 찾을 때 어떤폴더를 이용할 것 인
  가??




● 큰 클래스 몇개보다는 작은 클래스 여럿이 더 바람직하
  며, 작은 클래스 각각 책임이 하나이고, 변경할 이유가 하
  나이고, 다른 작은 클래스와 협력해 동작을 수행
4. 응집도

● 각 클래스 메소드는 클래스 인스턴스 변수를
  하나 이상 사용하여 응집도를 높여야 한다.

● "함수를 작게, 매개변수 목록을 짧게"라는 전
  략을 따르다 보면 몇몇 메소드에서만 사용하
  는 인스턴스 변수가 많아지는데 이때 응집도
  가 높아지도록 클래스를 분리한다.

● 클래스가 응집력을 잃는다면 쪼개라!
4. 응집도
● 4. 응집도    (209 Page)




● PrimePrinter 클래스는 실행환경을 책임.
● RowColumnPagePrinter 클래스는 숫자 목록을 주어진
  행과 열에 맞춰 출력을 책임.
● PrimeGenerator 클래스는 소수 목록 생성을 책임

● 길이가 늘어난 이유
  - 서술적인 변수 이름 사용
  - 주석을 추가하는 수단으로 함수 선언과 클래스 선언 활용
  - 가독성을 높이고자 공백 추가 및 형식 유지
5. 변경하기 쉬운 클래스
● 클린 시스템은 클래스를 체계적으로 정리해 변경에 수반
  하는 위험을 낮춘다.




● Update 문을 추가하면 클래스 변경이 발생하며 다른 코
  드를 망칠 잠재적 위험존재
● 또한 기존 SQL 문을 수정해도 클래스 변경 발생하며 테
  스트도 다시 수행되야 한다.
5. 변경하기 쉬운 클래스
5. 변경하기 쉬운 클래스

● 클래스 단순화, 이해도 상승, 잠재적 위험 제
  거, 테스트 증명 용이

● 새로운 SQL 문 추가시 기존 클래스 변경 X

● SRP, OCP 지원
5. 변경하기 쉬운 클래스

● 인터페이스와 추상 클래스를 사용하여 구현
  이 미치는 영향을 격리

● Portfolio 클래스는 5분 단위로 값이 변화하는
  TokyoStockExchange 외부 API를 사용하여
  값을 계산 할때, 테스트 코드를 만들기 힘들
  다.

● 그러므로 StockExchange라는 인터페이스를
  생성한 후 메소드 하나를 선언한다.
5. 변경하기 쉬운 클래스
            ●   시스템 결합도를 낮추면 유연성과 재
                사용성도 더 높아진다.

            ●   결합도가 낮다는 말은 각 시스템 요소
                가 다른 요소로부터, 또한 변경으로부
                터 잘 격리돼 있다는 의미

            ●   결합도를 최소로 줄이면 자연스럽게
                또 다른 클래스 설계 원칙인 DIP
                (Dependency Inversion Principle)를 따
                르는 클래스가 나온다.

Más contenido relacionado

Destacado

14. no sql을 넘어
14. no sql을 넘어14. no sql을 넘어
14. no sql을 넘어
kidoki
 
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
Donghan Kim
 
NoSQL 동향
NoSQL 동향NoSQL 동향
NoSQL 동향
NAVER D2
 
SME marketing 4.0 เชียงใหม่ 16122559
SME marketing 4.0 เชียงใหม่ 16122559SME marketing 4.0 เชียงใหม่ 16122559
SME marketing 4.0 เชียงใหม่ 16122559
Weera Chearanaipanit
 

Destacado (20)

The Life and Death of Marketing
The Life and Death of MarketingThe Life and Death of Marketing
The Life and Death of Marketing
 
14. no sql을 넘어
14. no sql을 넘어14. no sql을 넘어
14. no sql을 넘어
 
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
제2회 사내기술세미나-no sql(배표용)-d-hankim-2013-4-30
 
NoSQL 동향
NoSQL 동향NoSQL 동향
NoSQL 동향
 
SME marketing 4.0 เชียงใหม่ 16122559
SME marketing 4.0 เชียงใหม่ 16122559SME marketing 4.0 เชียงใหม่ 16122559
SME marketing 4.0 เชียงใหม่ 16122559
 
전문 검색 기술
전문 검색 기술전문 검색 기술
전문 검색 기술
 
Marketing 4.0 and Network Marketing
Marketing 4.0 and Network MarketingMarketing 4.0 and Network Marketing
Marketing 4.0 and Network Marketing
 
[Ydm]에이전시를위한인플루언서마케팅전략 ydm monthly_nov
[Ydm]에이전시를위한인플루언서마케팅전략 ydm monthly_nov[Ydm]에이전시를위한인플루언서마케팅전략 ydm monthly_nov
[Ydm]에이전시를위한인플루언서마케팅전략 ydm monthly_nov
 
Philip Kotler Presentation on ASEAN Marketing Summit 2015
Philip Kotler Presentation on ASEAN Marketing Summit 2015Philip Kotler Presentation on ASEAN Marketing Summit 2015
Philip Kotler Presentation on ASEAN Marketing Summit 2015
 
Marketing 4.0
Marketing 4.0Marketing 4.0
Marketing 4.0
 
Digital Marketing 4.0
Digital Marketing 4.0Digital Marketing 4.0
Digital Marketing 4.0
 
Adqua 인플루언서를 통한 소비자 관계마케팅 ydm_monthly_MAY_2016
Adqua 인플루언서를 통한 소비자 관계마케팅 ydm_monthly_MAY_2016Adqua 인플루언서를 통한 소비자 관계마케팅 ydm_monthly_MAY_2016
Adqua 인플루언서를 통한 소비자 관계마케팅 ydm_monthly_MAY_2016
 
Philip Kotler Marketing
Philip Kotler MarketingPhilip Kotler Marketing
Philip Kotler Marketing
 
Marketing 4.0
Marketing 4.0Marketing 4.0
Marketing 4.0
 
[YDM] YelloExchange '데이터가 만들고 인공지능이 운영하는 검색광고 최적화'
[YDM] YelloExchange '데이터가 만들고 인공지능이 운영하는 검색광고 최적화'[YDM] YelloExchange '데이터가 만들고 인공지능이 운영하는 검색광고 최적화'
[YDM] YelloExchange '데이터가 만들고 인공지능이 운영하는 검색광고 최적화'
 
[Ydm] dmajor 효과적인 디지털콘텐츠 마케팅을 위한 생각의 출발점
[Ydm] dmajor 효과적인 디지털콘텐츠 마케팅을 위한 생각의 출발점[Ydm] dmajor 효과적인 디지털콘텐츠 마케팅을 위한 생각의 출발점
[Ydm] dmajor 효과적인 디지털콘텐츠 마케팅을 위한 생각의 출발점
 
20160203_마인즈랩_딥러닝세미나_09 사물인터넷 홈오토메이션허브 박성준부사장
20160203_마인즈랩_딥러닝세미나_09 사물인터넷 홈오토메이션허브 박성준부사장20160203_마인즈랩_딥러닝세미나_09 사물인터넷 홈오토메이션허브 박성준부사장
20160203_마인즈랩_딥러닝세미나_09 사물인터넷 홈오토메이션허브 박성준부사장
 
[Ydm]yellostory 남들과 다른 블로그를 꿈꿔라 ydm_monthly_may_2016
[Ydm]yellostory 남들과 다른 블로그를 꿈꿔라 ydm_monthly_may_2016[Ydm]yellostory 남들과 다른 블로그를 꿈꿔라 ydm_monthly_may_2016
[Ydm]yellostory 남들과 다른 블로그를 꿈꿔라 ydm_monthly_may_2016
 
[Ydm]익숙함과 새로움의 공존, 스마트시대가 온다. ydm monthly aug_2016
[Ydm]익숙함과 새로움의 공존, 스마트시대가 온다. ydm monthly aug_2016[Ydm]익숙함과 새로움의 공존, 스마트시대가 온다. ydm monthly aug_2016
[Ydm]익숙함과 새로움의 공존, 스마트시대가 온다. ydm monthly aug_2016
 
(ENG) All About Virtual Reality & Augmented Reality by YDM
(ENG) All About Virtual Reality & Augmented Reality by YDM(ENG) All About Virtual Reality & Augmented Reality by YDM
(ENG) All About Virtual Reality & Augmented Reality by YDM
 

Similar a 10장 클래스

Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
현찬 양
 
C Language II
C Language IIC Language II
C Language II
Suho Kwon
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기
Daum DNA
 
[IT기술칼럼#1]고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼#1]고급자바스크립트  for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원[IT기술칼럼#1]고급자바스크립트  for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼#1]고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿
해강
 

Similar a 10장 클래스 (20)

Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
 
[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿
 
EC 789
EC 789EC 789
EC 789
 
C Language II
C Language IIC Language II
C Language II
 
디자인패턴 1~13
디자인패턴 1~13디자인패턴 1~13
디자인패턴 1~13
 
Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준Head first디자인패턴 1~13_희민_호준
Head first디자인패턴 1~13_희민_호준
 
클린 코드 part2
클린 코드 part2클린 코드 part2
클린 코드 part2
 
PaLM Paper Review
PaLM Paper ReviewPaLM Paper Review
PaLM Paper Review
 
토비의 스프링 - DI
토비의 스프링 - DI토비의 스프링 - DI
토비의 스프링 - DI
 
Apex Trigger를 위한 OOP 기초
Apex Trigger를 위한 OOP 기초Apex Trigger를 위한 OOP 기초
Apex Trigger를 위한 OOP 기초
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기
 
Chapter7~9 ppt
Chapter7~9 pptChapter7~9 ppt
Chapter7~9 ppt
 
[IT기술칼럼#1]고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼#1]고급자바스크립트  for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원[IT기술칼럼#1]고급자바스크립트  for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
[IT기술칼럼#1]고급자바스크립트 for AngularJS, React_고급자바스크립트,AngularJS,React전문교육학원
 
(고급자바스크립트 강좌)자바스크립트 클래스?
(고급자바스크립트 강좌)자바스크립트 클래스?(고급자바스크립트 강좌)자바스크립트 클래스?
(고급자바스크립트 강좌)자바스크립트 클래스?
 
Oop design principle SOLID
Oop design principle SOLIDOop design principle SOLID
Oop design principle SOLID
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Effective java
Effective javaEffective java
Effective java
 
[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿
 
Java collections framework
Java collections frameworkJava collections framework
Java collections framework
 

Más de kidoki

Chapter 14. json
Chapter 14. jsonChapter 14. json
Chapter 14. json
kidoki
 
로그 수집, 집약
로그 수집, 집약로그 수집, 집약
로그 수집, 집약
kidoki
 
My sql 장애복구
My sql 장애복구My sql 장애복구
My sql 장애복구
kidoki
 
9장. 문서 데이터베이스
9장. 문서 데이터베이스9장. 문서 데이터베이스
9장. 문서 데이터베이스
kidoki
 
Ch18. 빅리그 거물에서 선지자로
Ch18. 빅리그 거물에서 선지자로Ch18. 빅리그 거물에서 선지자로
Ch18. 빅리그 거물에서 선지자로
kidoki
 
Ch.11 승진
Ch.11 승진Ch.11 승진
Ch.11 승진
kidoki
 
Ch7. 소프트웨어 r&d 조직
Ch7. 소프트웨어 r&d 조직Ch7. 소프트웨어 r&d 조직
Ch7. 소프트웨어 r&d 조직
kidoki
 
Ch2. 좋은 소프트웨어란
Ch2. 좋은 소프트웨어란Ch2. 좋은 소프트웨어란
Ch2. 좋은 소프트웨어란
kidoki
 
클러스터링을 통한 패턴 추출
클러스터링을 통한 패턴 추출클러스터링을 통한 패턴 추출
클러스터링을 통한 패턴 추출
kidoki
 
확률 계산하기
확률 계산하기확률 계산하기
확률 계산하기
kidoki
 

Más de kidoki (18)

Chapter 14. json
Chapter 14. jsonChapter 14. json
Chapter 14. json
 
Http 헤더
Http 헤더Http 헤더
Http 헤더
 
로그 수집, 집약
로그 수집, 집약로그 수집, 집약
로그 수집, 집약
 
My sql 장애복구
My sql 장애복구My sql 장애복구
My sql 장애복구
 
9장. 문서 데이터베이스
9장. 문서 데이터베이스9장. 문서 데이터베이스
9장. 문서 데이터베이스
 
Code chapter15
Code chapter15Code chapter15
Code chapter15
 
Code chapter5
Code chapter5Code chapter5
Code chapter5
 
Ch18. 빅리그 거물에서 선지자로
Ch18. 빅리그 거물에서 선지자로Ch18. 빅리그 거물에서 선지자로
Ch18. 빅리그 거물에서 선지자로
 
Ch.11 승진
Ch.11 승진Ch.11 승진
Ch.11 승진
 
Ch7. 소프트웨어 r&d 조직
Ch7. 소프트웨어 r&d 조직Ch7. 소프트웨어 r&d 조직
Ch7. 소프트웨어 r&d 조직
 
Ch2. 좋은 소프트웨어란
Ch2. 좋은 소프트웨어란Ch2. 좋은 소프트웨어란
Ch2. 좋은 소프트웨어란
 
11장. 분석 패턴의 적용
11장. 분석 패턴의 적용11장. 분석 패턴의 적용
11장. 분석 패턴의 적용
 
2장. 의사소통과 언어 사용
2장. 의사소통과 언어 사용2장. 의사소통과 언어 사용
2장. 의사소통과 언어 사용
 
클러스터링을 통한 패턴 추출
클러스터링을 통한 패턴 추출클러스터링을 통한 패턴 추출
클러스터링을 통한 패턴 추출
 
정규확률분포
정규확률분포정규확률분포
정규확률분포
 
Composite pattern
Composite patternComposite pattern
Composite pattern
 
확률 계산하기
확률 계산하기확률 계산하기
확률 계산하기
 
Decorator pattern
Decorator patternDecorator pattern
Decorator pattern
 

10장 클래스

  • 1. 클래스 박기덕
  • 2. 목차 1. 클래스 체계 2. 클래스 규모 3. SRP 4. 응집도 5. 변경하기 쉬운 클래스
  • 3. 1. 클래스 체계 ● 클래스를 정의하는 표준 자바 관례 ● 변수와 유틸리티 함수는 가능한 공개하지 않는편이 좋지 만 반드시 숨겨야 할 법칙은 없다. (Test Code 작성을 위 한 protected 등)
  • 4. 2. 클래스 규모 70여개의 공 개 메소드로 이루어진 Class . . . 위의 함수를 5개 의 메소드로 줄 이면 작은 Class 인가??
  • 5. 2. 클래스 규모 ● 클래스를 설계할때도 함수와 마찬가지로 '작 게'가 기본 규칙 이다. ● 클래스의 책임이 작을 때 클래스는 '작게' 된 다. ● 클래스의 작명이 클래스 크기를 줄인다. ● 클래스 이름에 연결구를 사용하지 않으며, 25 단어 내외로 작명한다.
  • 6. 3. SRP ● SRP(Single Responsibility Principle) 이란 클 래스를 변경하는 이유가 오직 하나뿐이어야 한다는 원칙 ● SRP는 객체 지향 설계에 중요한 개념 ● "돌아가는 소프트웨어" & "깨끗하고 체계적인 소프트웨어"
  • 7. 3. SRP ● 여행가서 찍은 사진을 찾을 때 어떤폴더를 이용할 것 인 가?? ● 큰 클래스 몇개보다는 작은 클래스 여럿이 더 바람직하 며, 작은 클래스 각각 책임이 하나이고, 변경할 이유가 하 나이고, 다른 작은 클래스와 협력해 동작을 수행
  • 8. 4. 응집도 ● 각 클래스 메소드는 클래스 인스턴스 변수를 하나 이상 사용하여 응집도를 높여야 한다. ● "함수를 작게, 매개변수 목록을 짧게"라는 전 략을 따르다 보면 몇몇 메소드에서만 사용하 는 인스턴스 변수가 많아지는데 이때 응집도 가 높아지도록 클래스를 분리한다. ● 클래스가 응집력을 잃는다면 쪼개라!
  • 10. ● 4. 응집도 (209 Page) ● PrimePrinter 클래스는 실행환경을 책임. ● RowColumnPagePrinter 클래스는 숫자 목록을 주어진 행과 열에 맞춰 출력을 책임. ● PrimeGenerator 클래스는 소수 목록 생성을 책임 ● 길이가 늘어난 이유 - 서술적인 변수 이름 사용 - 주석을 추가하는 수단으로 함수 선언과 클래스 선언 활용 - 가독성을 높이고자 공백 추가 및 형식 유지
  • 11. 5. 변경하기 쉬운 클래스 ● 클린 시스템은 클래스를 체계적으로 정리해 변경에 수반 하는 위험을 낮춘다. ● Update 문을 추가하면 클래스 변경이 발생하며 다른 코 드를 망칠 잠재적 위험존재 ● 또한 기존 SQL 문을 수정해도 클래스 변경 발생하며 테 스트도 다시 수행되야 한다.
  • 13. 5. 변경하기 쉬운 클래스 ● 클래스 단순화, 이해도 상승, 잠재적 위험 제 거, 테스트 증명 용이 ● 새로운 SQL 문 추가시 기존 클래스 변경 X ● SRP, OCP 지원
  • 14. 5. 변경하기 쉬운 클래스 ● 인터페이스와 추상 클래스를 사용하여 구현 이 미치는 영향을 격리 ● Portfolio 클래스는 5분 단위로 값이 변화하는 TokyoStockExchange 외부 API를 사용하여 값을 계산 할때, 테스트 코드를 만들기 힘들 다. ● 그러므로 StockExchange라는 인터페이스를 생성한 후 메소드 하나를 선언한다.
  • 15. 5. 변경하기 쉬운 클래스 ● 시스템 결합도를 낮추면 유연성과 재 사용성도 더 높아진다. ● 결합도가 낮다는 말은 각 시스템 요소 가 다른 요소로부터, 또한 변경으로부 터 잘 격리돼 있다는 의미 ● 결합도를 최소로 줄이면 자연스럽게 또 다른 클래스 설계 원칙인 DIP (Dependency Inversion Principle)를 따 르는 클래스가 나온다.