'허니몬의 IT 이야기'에 해당되는 글 397건

허니몬의 IT 이야기/프로그래머, '코드 엔지니어'
JAVA 언어로 배우는 디자인 패턴 입문
카테고리 컴퓨터/IT
지은이 유키 히로시 (영진닷컴, 2008년)
상세보기

이 책의 서두에는 책의 내용에서 사용하는 UML에 대한 설명이 나와있습니다. ^^; 이 글은 그 내용을 그대로 옮겨적은 글입니다. 개인적으로 UML 을 보게 될 때 사용하려고 작성한 문서입니다. ^^; 다른 분들도 참고만 해주세요.



● UML

UML은 Unified Modeling Language의 약자로, 시스템을 시각화하거나 시스템의 사양이나 설계를 문서화하기 위한 표현방법입니다.

UML Resource page -
http://www.omg.org/uml/


● 클래스 다이어그램

UML의 클래스 다이어그램(Class Diagram)은 클래스나 인스턴스, 인터페이스 등의 정적인 관계를 표현한 것입니다. 클래스 다이어그램이라는 이름으로 불리지만, 클래스만 등장하는 것은 아닙니다.


● 클래스와 계층 관계

그림 0-1은 Java 프로그램과 대응하는 클래스 다이어그램의 예입니다.

Fig0-1.jpg

그림 0-1은 ParentClass와 ChildClass라는 두 클래스의 관계를 표시하고 있습니다. △이 붙어있는 실선의 화살표(①)는 클래스의 계층관계를 표시하고 있습니다. 화살표는 하위 클래스에서 상위 클래스로 향하고 있습니다(이를 테면, 이것은 extends의 화살표입니다).

ParentClass는 ChildClass의 상위 클래스이고, 반대로 말하면 ChildClass는 ParentClass의 하위 클래스입니다. 상위 클래스를 기저(基底) 클래스나 부모 클래스, 하위 클래스를 파생 클래스나 자식 클래스 또는 확장 클래스라고도 합니다. 각각의 클래스는 직사각형으로 표현합니다. 직사각형을 수평선으로 분할하여

- 클래스의 이름

- 필드의 이름

- 메소드의 이름

을 순서대로 적습니다. 이름뿐만 아니라 부가적인 정보(액세스 제어나 메소드의 인수나 형태 등)를 쓰는 경우도 있고, 반대로 주목할 필요가 없는 항목은 생략하는 경우도 있습니다(따라서, 클래스 다이어그램에서 소스 프로그램을 복원할 수 있는 것은 아닙니다).

abstract 클래스(추상 클래스)의 이름은 이탤릭체를 사용합니다. 예를 들어, 그림 0-1에서 ParentClass는 추상 클래스이므로 이탤릭체로 되어 있습니다.

static 필드(클래스 필드)의 이름에는 밑줄을 사용합니다. 예를 들어, field2는 클래스 필드이므로 밑줄이 그어져 있습니다.

abstract 메소드(추상 메소드)는 이탤릭체를 사용합니다. 예를 들어, ParentClass의 MethodA는 추상 메소드이므로 이탤릭체로 되어 있습니다.

static 메소드(클래스 메소드)의 이름에는 밑줄을 사용합니다. 예를 들어, ChildClass의 methodC는 클래스 메소드이므로 밑줄이 그어져 있습니다.

화살표의 방향

UML에서는 하위 클래스에서 상위 클래스를 향해 화살표가 뻗어 있습니다. 상위 클래스를 기준으로 하위 클래스를 만들기 때문에 화살표를 반대로 이해하는 것이 이해하기 쉽다고 생각할지도 모릅니다.

다음과 같이 생각하면 이해하기 쉽습니다. 하위 클래스를 정의할 때 extends로 상위 클래스를 지정합니다. 따라서 하위 클래스는 반드시 상위 클래스를 알고 있습니다. 그러나 상위 클래스는 하위 클래스를 알고 있다고 할 수 없습니다. 상대를 지목할 수 있는 것은 상대를 알고 있을 때 뿐입니다. 그래서 하위 클래스에서 상위 클래스로 화살표를 표시하는 것입니다.


인테페이스와 구현

 그림 0-2도 클래스 다이어그램의 예입니다. 이 그림은 Printable이라는 인터페이스가 있고, PrintClass라는 클래스가 Printable 인터페이스를 구현하고 있는 것을 나타내고 있습니다. 이 책에서는 추상 클래스와의 유사성을 강조하기 위해 인터페이스 이름에 이탤릭체를 사용하고 있지만, 일반적으로는 이탤릭체를 사용하지 않는 경우도 많이 있습니다.

 △가 붙은 점선의 화갈표는 인터페이스와 구현 클래스의 관계를 나타내고 있습니다. 화살표는 구현 클래스에서 인터페이스를 향하고 있습니다(말하자면, 이것은 implements의 화살표입니다. UML에서 Java의 인터페이스를 표현하는 경우에는 <<imterface>>라고 씁니다.

Fig0-2.jpg

 

집약

그림 0-3도 클래스 다이어그램의 예입니다. 이 그림에서는 Color, Fruit, Basket 이라는 세 클래스의 관계를 나타내고 있습니다. Basket 클래스의 fruit 필드는 Fruit 클래스의 배열이 되 있고, Basket 클래스의 인터페이스는 Fruit 클래스의 인스턴트를 여러 개 가집니다. 또한 Fruit 클래스의 color 필드는 Color 클래스형으로 되어 있고, Fruit 클래스의 인스턴스는 Color 클래스의 인스턴스를 1개 가집니다. 바꾸어 말하면, 바구니에 과일이 몇 개인가 들어있고, 과일은 각각의 색을 가지고 있는 관계입니다.

이와 같은 ‘갖고 있는’ 관계를 ‘집약(aggregation)’이라고 합니다. 인스턴스를 갖고 있으면 개수에 상관없이 그 관계는 집약입니다. 배열을 사용하고 있어도, java.util.Vector 클래스를 사용하고 있어도, 어떤 구현이라 해도 인스턴트를 갖고 있으면 그 관계는 집약입니다.

◇이 붙은 선은 집약을 나타냅니다. 마름모꼴 모형의 접시 위에 물건이 놓여있다고 생각하면 됩니다.


액세스 제어

 

그림 0-4도 클래스 다이어그램의 예입니다.

Fig0-3.jpg

그림 0-4에서는 메소드나 필드의 액세스 제어를 표현하고 있습니다. UML에서 액세스 제어를 표현하고 싶은 경우, 메서드나 필드의 이름 앞에 기호를 붙입니다.

▪ + 가 붙어있는 경우 : public인 메소드나 필드를 나타냄. 액세스 가능

▪ - 가 붙어있는 경우 : private인 메소드나 필드를 나타냄. 외부에서 액세스 가능

▪ # 가 붙어있는 경우 : protect인 메소드나 필드를 나타냄.

▪ ~ 가 붙어있는 경우 : 동일한 패키지 내에서만 액세스할 수 있는 메소드나 필드

클래스의 관계

클래스의 관계를 나타내기 위해 관련된 이름에 ▶ 표시를 붙여줍니다. 그림 0-5는 클래스의 관계를 나타냅니다.

Fig0-4.jpg

 

시퀀스 다이어그램

UML의 시퀀스 다이어그램(Sequence Diagram)은 프로그램이 작동할 때 어떤 메소드가 어떤 순서로 실행되는가, 어떤 추상 클래스가 어떤 순서로 실행되는가를 표현한 것입니다.

클래스 다이어그램은 ‘시간에 의해 변하지 않는 것(정적인 관계)’를 나타냅니다. 반면에 시퀀스 다이어그램은 ‘시간에 따라 변하는 것(동적인 관계)’를 나타냅니다.

 

● 처리의 흐름과 오브젝트(객체) 간의 협조 동작

그림 0-6은 시퀀스 다이어그램의 일례입니다.

Fig0-5.jpg

그림 0-6의 오른쪽이 시퀀스 다이어그램입니다. 왼쪽에는 대응하는 Java 프로그램의 일부를 표시하고 있습니다. 이 그림에는 세 개의 인스턴스가 등장하고 있습니다. 인스턴스는 각각 다이어그램의 위쪽에 있는 직사각형에 대응하고 있습니다. 직사각형 안에는 :Client, :Server, :Device와 같이 콜론(:) 뒤에 클래스 명을 표기하고 밑줄이 그어져 있습니다. 이것은 각각의 Client 클래스의 인스턴스, Server 클래스의 인스턴스, Device 클래스의 인스턴스를 표시하고 있습니다. 각각의 인스턴스에 이름이 필요할 경우에는 server:Server와 같이 콜론 앞에 이름을 적습니다.

 

각각의 인스턴스에서 아래 방향으로 뻗어있는 점섬을 라이프 라인이라고 합니다. 여기에서 시간은 아래 방향으로 흐른다고 생각하십시오. 위쪽은 과거아래쪽은 미래입니다. 라이프 라인은 인스턴스가 존재하는 동안만 존재합니다. 라이프 라인의 중간에 가늘고 긴 직사각형은 오프젝트(객체)가 이동 중인 것을 나타냅니다.

가로 방향으로 화살표가 그려져 있습니다. open 이라고 라벨이 붙은 화살표를 봅시다. 앞이 검은 화살표(─▶)의 실선은
메소드의 호출을 표시합니다. 여기서는 client 가 server의 open 메소드를 호출한 것을 나타내고 있습니다. open 메소드를 호출했기 때문에 server 인스턴스가 활동하게 되고 가늘고 긴 직사각형으로 시작되었습니다.

 

open의 화살표에서 시작한 server의 가늘고 긴 직사각형의 아래쪽에서 client 쪽으로 점선의 화살표(◅┄)가 뻗어 있습니다. 이것은
open 메소드에서의 리턴(반환)을 표시하고 있습니다. 이 그림에서는 모든 메소드의 리턴을 그리고 있지만 생략하는 경우도 있습니다. 제어가 client로 되돌아왔기 때문에 server 인스턴스가 활동 중인 사각형은 일단 종료됩니다.

 

또한 같은 방법으로 print 메소드가 호출됩니다. 이번에는 print 메소드 안에서 다시 device 인스턴스의 write 메소드를 호출하고 있습니다.

이와 같이 여러 개의 인스턴스 간의 행동을 도식화할 수 있습니다. 시퀀스 다이어그램은 라이프 라인을 따라가면서 위에서부터 순서대로 읽어 갑니다. 그리고 화살표가 있으면 그것을 따라가면서 인스턴스 간의 협조 동작을 확인해 갑니다.

이 글은 스프링노트에서 작성되었습니다.

허니몬의 IT 이야기/프로그래머, '코드 엔지니어'

객체 생성 : 만들어진 객체 사용, 변수, 메서드 혹은 멤버 필드

class_name 변수 = new class_name_method();

기본 자료 타입 변수는 선언하면 메모리 공간이 할당됨.

‘레퍼런스 타입(배열, 클래스, 인터페이스)’은 new를 이용해서 객체를 생성하기 전까지는 메모리 공간이 할당되지 않음.


레퍼런스

- " == " : 메모리 주소 비교 / 기본형에서는 크기 비교

- “equals()" : 레퍼런스 에서만 쓰임. 내용 비교


객체 생성과 패키지

생성자(Constructor) : class 이름과 동일한 이름을 갖는 메서드

default 생성자는 프로그램에서 생성자를 정의하지 않는 경우에 자바의 컴파일러에 의해서 자동적으로 생성된다.

class 변수(객체) = new 메서드();

I) memory 할당

ii) default 초기화

iii) 명시적 초기화 : 생성자에서 명시한 경우

this : 클래스 내에서 자기 자신을 자리키는 레퍼런스

1. 상속받은 부모 클래스가 아닌 자기 자신의 멤버필드나 메서드를 명확히 표현하기 위해서 사용한다.

2. this 는 객체 전체를 함수(메서드)의 매개변수로 전달

this()는 생성자 안에서만 사용가능. 명시적인 초기화 이용시 사용


Overloading : 한 클래스 내에서 함수(메서드) 이름을 동일하지만, 함수의 매개변수(타입이나 수)가 다른 경우.


상속(Inheritance)

class 자식 클래스 extends 부모 클래스

크기 비교 : 부모 클래스 > 자식 클래스

super : 상위 클래스(부모 클래스)의 메소드나 멤버필드 필요시 자식 클래스에서 사용

super() : 상위 클래스(부모 클래스)의 생성자 호출



오버라이딩(Overriding) : 얹어타기 : 나는 차려진 밥상에 숟가락만 얹는다.

상위 클래스(부모 클래스)에 있는 메서드를 서브 클래스에서 다른 작업을 하도록 동일한 함수 이름으로 재정의 하는 것.

▩ 추상화 클래스를 상속받아 사용할 경우 대부분 오버라이딩

public abstract class Human {

public abstract void...

}

public class Korea_human extens Human {

public void ...

}

public class Honeymon extends Korea_human {

public void

}

 단일 상속
인터페이스 : 다중 상속
 
 


언어의 추상화

추상화(Abstract) 물체 또는 현상의 주요 특성만을 표현하는 개념

1. 자료의 추상화 : 주어진 자료 구조, 자료를 사용자가 이해 가능하게 표현하는 방식

기본적 추상 : 저장값이 추상화, 컴퓨터의 자료를 bit 열이 아닌 자료의 성질,

기억 장소의 명칭을 이용하여 표현

구조적 추상 : 서로 관계가 있는 메모리 셀 간의 구조에 대한 추상화로서 구조적

자료형인 배열이 이에 해당

단위적 추상 : 추상 자료형 / 자료의 캡슐화(package, class)

2. 제어의 추상화 : 의미있는 여러 제어문(기계어)를 사용자가 이해 가능하게 표현하는 방식으로 조건문, 반복문 등이 이에 해당

기본적 추상 : 몇 개의 명령문을 하나의 추상적 구문으로 구성

구조적 추상 : 구조적 명령문 : 조근을 포함하여 실행될 명령문을 단일 그룹으로...




내용이 많이 부족합니다. ^^;;
아직 제 자신의 머릿 속에서 추상화라는 개념이 확실히 자리잡힌 상황이 아니라서 그런 것 같습니다.
내 주변에서 일어나는 일들에 대해서 추상화를 하는 연습을 많이 해볼 예정입니다. ^^; 그렇게 적용하는 방법 밖에 없네요. ㅎㅎ
허니몬의 IT 이야기/프로그래머, '코드 엔지니어'
JAVA 언어로 배우는 디자인 패턴 입문
카테고리 컴퓨터/IT
지은이 유키 히로시 (영진닷컴, 2008년)
상세보기

자바를 본격적으로 시작한지 3주째에 들어섰다. 아는 형님의 추천을 받아 디자인 패턴 관련한 책을 한권 구매했다. 4월 1일 저녁에 인터파크에 신청해서 4월 2일 아침에 출고되어 4월 2일 오후 즘에 받아볼 수 있었다. 서울이라고 당일 출고되어 당일 배송되는 센스를 보여주었다.

구매가는 22,500원. 포인트 할인을 받아서 20,000원에 결재를 했습니다. 사은품으로 영진 출판사에서 다이어리를 주었는데... 제 취향은 아니더군요... ㅡ0-);;

프로그램을 개발할 때 예전과 같은 작업을 반복하고 있다는 느낌이 들 때가 있습니다. 경험이 쌓일수록 이러한 자신만의 '패턴'이 머리 속에 축적되고, 그 '패턴'을 다음 개발에 적용할 수 있게 됩니다.

Erich Gamma, Richard Helm, Ralph Johndon, John vissides 4명은 개발자의 '경험'이나 '내적인 축적을
'디자인 패턴'
이라는 형태로 정리하였습니다. 이 4명을 the Gang Of Four  또는 GOF라고 부릅니다.

GOF는 자주 사용하는 23개의 디자인 패턴에 '이름'을 붙이고 '카달로그'로 정리해서 1권의 책으로 만들었습니다. 이 책이 바로 "오브젝트(객체) 지향에 있어서 재이용을 위한 디자인 패턴"(Elements of Reusable Object-Oriented Software) 입니다.

- 책의 서문 중 발췌

인간은 반복적으로 자신의 행위를 반복하는 모습을 보입니다. 이런 반복적인 행동은 패턴화가 되어 나타나고, 그런 패턴을 잘 분석하면 유익한 쪽으로 활용을 할 수가 있지요. 이제 책의 머리말을 열었을 뿐입니다. 내가 Java를 이용하여(자바만 이용할 수는 없겠지만) 개발 및 유지보수에 참여하는 속에서 나의 디자인 패턴을 만들어갈 수 있으면 좋겠습니다. ^^;; 뭔가 주절주절 이야기는 하지만... 두서가 없네요.

이 책을 일주일 안에 두번 정도 쭈욱 훑어보는 것이 나의 목표입니다. ㅎㅎ.
허니몬의 IT 이야기
만박님의 미투홈 : http://me2day.net/p/sumanpark/p17lf6

OTL.... 미투에서는 만우절 이벤트 없을거라더니.... 아래에 보이는 기존 페이지를....
사용자 삽입 이미지

아래에 보이는 것처럼.... 모바일용화면으로 변경을 했다!! O,.o.
얼마전 네이버에서 모바일에 집중하겠다는 기자회견이 있은 후에 있는 일이라, 0.1초간 잠시 고민했다. OTL....

사용자 삽입 이미지
사용자 삽입 이미지

개인적인 바램으로는... ㅡㅅ-);; 컴퓨터 상에서 까지 모바일로 보고 싶지는 않사와요. ㅠㅅ-)
흑흑... ㅡㅅ-)b 믹시의 만우절 77 이벤트 보다 더 쇼킹하군요!!
허니몬의 IT 이야기
  브라우저 상에서 쓸 수 있는 웹오피스 서비스인 ThinkFree(http://www.thinkfree.com, 한글과 컴퓨터에서 서비스)의 사이트 디자인이 확 바뀌었습니다. 3월 31일 경 변경된 것으로 보여집니다. MS 오피스를 설치할 수 없는 환경(공공기관, 학교 등)에서 종종 오피스를 사용해야할 필요성이 많이 생기는 탓에 알게된 서비스 입니다. ^^

  사이트 첫화면부터 빠른 시작을 통해서 바로바로 문서를 열어볼 수가 있습니다. ^^; 대신 이렇게 바뀌면서 프로그램이 실행된 상태에서 내 컴퓨터에 저장되어 있는 문서들을 바로 불러와 수정할 수는 없는 형태로 변경이 되었습니다. 웹하드(무료 1GB, ThinkFree에서는 마이오피스라고 칭함) 상에 업로드를 시키고 그 후에 오피스를 실행하고 열어야 하는 번거로움이 발생을 했습니다. 이건 저에게 번거롭더군요.

사용자 삽입 이미지

  비가입 회원의 경우에는 빠른 시작으로는 5MB 이하로의 용량제한이 걸립니다.

빠른 시작 메뉴들

사용자 삽입 이미지

  이 빠른 시작에서 찾아보기로 해서 문서를 업로드(역시 임시 웹하드에 업로드 시킨 후 그것을 열어서 보여줌)를 해서 보여줍니다. 왜 OTL... 내 컴퓨터에서 직접 열어볼 수는 없을까요? ㅡㅅ-)?

사용자 삽입 이미지

  DOC, ppt, xls 등을 PDF 등으로 변환하는 기능을 해줍니다. ^^ 변환 타입은 image, text, pdf 세가지 타입이 가능합니다.

사용자 삽입 이미지
 
게시하기는 게시를 원하는 문서를 찾아 선택한 후에 게시하기를 누르면 다음과 같은 화면이 출력됩니다.


게시하기에서 문서 올린 후,


아래에 있는 삽입(Embed) 코드를 복사해서(친절하게 아래에 보면 복사하기 버튼이 있다) 블로그에서 HTML 편집을 하면서 원하는 곳에 붙여넣기 하면 되겠습니다. ㅡㅅ-)>

  << ThinkFree 에 doc 문서를 올린 후에 Embed 태그로 불러온 문서 입니다. 한번 구현해보세요. ^^

사용자 삽입 이미지

  공유하기는 임시 웹하드 공간에 파일을 올려놓고 ThinkFree 내에서 웹오피스로 보여주는 기능입니다.

사용자 삽입 이미지

업로드 및 문서검색은 가입자들이 사용하는 기능입니다.

사용자 삽입 이미지

로그인 창은 다음과 같으며, ThinkFree에 직접 가입하거나 구글 계정으로 로그인이 가능합니다. ^^

사용자 삽입 이미지

  가입자의 경우에는 마이오피스(용량 1GB)에 저장된 문서를 공통으로 편집도 가능하다. 이 부분은 유용하다고 생각합니다. 기업체에서도 약간의 비용을 더 지불해서 빠른 속도와 안정적인 서비스를 받을 수 있을 겁니다. 이 부분이 한컴에서 ThinkFree를 제공하면서 노리는 부분일 것입니다. ^^

사용자 삽입 이미지

문서(Docs)를 선택하면 다른 사람이 작성하고 공유를 한 문서들을 볼 수 있습니다.

사용자 삽입 이미지

이번에 추가된 것으로 보이는, 프로젝트 관리기능을 지원하는 WorkSpace 가 추가되었습니다.

본인의 경우, 앞으로 교육 과정에서 프로젝트 팀을 구성하고 지속적으로 이와 관련된 문서작업도 병행을 하게 될 겁니다. 그 때 사용을 해보고 사용후기를 올려보도록 하겠습니다. ^^;

현재는 오픈마루에서 제공하는 스프링노트에서 그룹노트를 만들어서 교육내용과 관련된 것들을 올리고 있습니다. ^^; 기회가 닿으면 스프링노트 사용기도 올리겠습니다. OTL... 올릴 것이 꽤 많이 있군요!!?
1 ··· 61 62 63 64 65 66 67 ··· 80
블로그 이미지

Email : ihoneymon@gmail.com 안녕하세요, 꿀괴물 입니다. ^^ 멋진 비행을 준비 하는 블로그 입니다. 만능형 인간이 되어 많은 이들에게 인정받고, 즐겁고 행복하게 살기를 간절히 원합니다!! 달콤살벌한 꿀괴물의 좌충우돌 파란만장한 여정을 지켜봐주세요!! ^^

허니몬