May 21, 2018 - cohesion_(logical cohesion)

응집도 (cohesion)

시간 응집도 (temporal)

특정 실행 시점으로 그룹화 될때 생깁니다.

하지만 이것은 주석으로만 설명 할수 있습니다. 코드로는 설명이 안됨(주석은 코드가 아니라 썩어버림)

아래의 예제이다.


	public void init()  {
		
        loadPropertiesData();
        loadFrameData();
        loadXmlData();
	}

May 21, 2018 - cohesion_(logical cohesion)

응집도 (cohesion)

논리적 응집도 (logical)

논리적 응집력이란 모듈의 일부가 논리적으로 분류되어 자연스럽지 만 똑같은 것을 수행하도록 분류되기 때문입니다.

InputStream 패턴 루틴화 아래는 InputStream 클래스


package java.io;

public abstract class InputStream implements Closeable {


    private static final int MAX_SKIP_BUFFER_SIZE = 2048;

    public abstract int read() throws IOException;

    public int read(byte b[]) throws IOException {
        return read(b, 0, b.length);
    }

    public int read(byte b[], int off, int len) throws IOException {
        if (b == null) {
            throw new NullPointerException();
        } else if (off < 0 || len < 0 || len > b.length - off) {
            throw new IndexOutOfBoundsException();
        } else if (len == 0) {
            return 0;
        }

        int c = read();
        if (c == -1) {
            return -1;
        }
        b[off] = (byte)c;

        int i = 1;
        try {
            for (; i < len ; i++) {
                c = read();
                if (c == -1) {
                    break;
                }
                b[off + i] = (byte)c;
            }
        } catch (IOException ee) {
        }
        return i;
    }


    public long skip(long n) throws IOException {

        long remaining = n;
        int nr;

        if (n <= 0) {
            return 0;
        }

        int size = (int)Math.min(MAX_SKIP_BUFFER_SIZE, remaining);
        byte[] skipBuffer = new byte[size];
        while (remaining > 0) {
            nr = read(skipBuffer, 0, (int)Math.min(size, remaining));
            if (nr < 0) {
                break;
            }
            remaining -= nr;
        }

        return n - remaining;
    }

    public int available() throws IOException {
        return 0;
    }

    public void close() throws IOException {}

    public synchronized void mark(int readlimit) {}

    public synchronized void reset() throws IOException {
        throw new IOException("mark/reset not supported");
    }

    public boolean markSupported() {
        return false;
    }

}


May 21, 2018 - coupling_(data coupling)

결합도 (coupling)

데이터 결합 (data coupling)

약결합

data coupling은 모듈이 매개 변수를 통해 데이터를 공유 할 때 발생합니다.


package com.github.sejoung.reactive.test;

public class DataCode {

    public int count(int i){
        return ++i;
    }

}



package com.github.sejoung.reactive.test;

public class DataCode2 {
    private DataCode dataCode;

    private int counter;

    public DataCode2(DataCode dataCode){
        this.dataCode = dataCode;
        this.counter = 0;
    }

    public void count(){
        this.counter = this.dataCode.count(this.counter);
    }

    public int getCounter(){
        return this.counter;
    }
}


실행 소스


package com.github.sejoung.reactive.test;

public class DataCodeTest {
    public static void main(String[] args) {
        DataCode2 dc = new DataCode2(new DataCode());

        dc.count();
        dc.count();

        System.out.println(dc.getCounter());
    }
}