JEP's Diary

모듈화 그리고 팩토리패턴 본문

Development/개발일지

모듈화 그리고 팩토리패턴

지으니88 2022. 10. 31. 21:31

클레이튼 기반으로 개발된 Wallet 앱에 이더리움 체인이나 다른 체인을 추가 하기 위한 모듈화 작업을 진행 중이다.

러프하게 생각했을때는 아래와 같은 흐름으로 설계했다.

 

Module level

1. 공통 동작 정의

- 기축통화를 전송한다.

- 토큰을 전송한다.

- NFT를 전송한다.

- 메시지 서명을 한다.

- 잔액을 조회한다. 등등

각 체인에서의 동작들을 interface에 정의한다.

public interface Chain {
    void sendCoin()
    void sendToken()
    void sendNFT()
    ...
}

 

2. 체인별로 interface를 implements 해서 공통 동작에 대한 내용을 구현한다.

- '기축통화를 전송한다'의 동작에 대해서 이더리움 체인에서는 이더를 전송하는 로직을 구현하며, 클레이튼 체인에서는 클레이를 전송하는 로직을 구현한다. (= interface 구현체 작성)

public class EthereumChain implements Chain {
    @Override
    public void sendCoin() {
    // send coin 로직
    }

    // Chain에 있는 interface 함수들 구현
    ...

}

 

3. 어떤 체인에서 실행할건지에 대한 객체 생성을 위해 Factory 클래스를 만든다

- 어떤 체인인지에 대한 객체 생성을 해주는 Factory 클래스를 구현한다.

public class ChainFactory {

	public Chain getChain(String chainType) {
		if (chainType == "Ethereum") {
	    	 return new EthereumChain()
	    } else if (chainType == "Klaytn") {
    		return new KlaytnChain()
	    }
	...
	}
}

 

Application level

4.앱 단에서 공통 동작으로 정의했던 interface의 함수를 호출함으로써 해당 동작들을 실행한다.

ChainFactory factory = new ChainFactory()
Chain chain = factory.getChain("Ethereum")

// Ethereum의 이더를 전송한다.
chain.sendCoin()

 

 

 

참고. https://velog.io/@ellyheetov/Factory-Pattern