응집도 (cohesion)
시간 응집도 (temporal)
특정 실행 시점으로 그룹화 될때 생깁니다.
하지만 이것은 주석으로만 설명 할수 있습니다. 코드로는 설명이 안됨(주석은 코드가 아니라 썩어버림)
아래의 예제이다.
public void init() {
loadPropertiesData();
loadFrameData();
loadXmlData();
}
특정 실행 시점으로 그룹화 될때 생깁니다.
하지만 이것은 주석으로만 설명 할수 있습니다. 코드로는 설명이 안됨(주석은 코드가 아니라 썩어버림)
아래의 예제이다.
public void init() {
loadPropertiesData();
loadFrameData();
loadXmlData();
}
논리적 응집력이란 모듈의 일부가 논리적으로 분류되어 자연스럽지 만 똑같은 것을 수행하도록 분류되기 때문입니다.
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;
}
}
약결합
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());
}
}