complexity, presentation, usability 의 밸런싱을 위해서 나옴
크고 정교한 코드에서 좀더 이해하고 알기 쉬운 user interface 를 위해서 제공되는 것
class Buffer
{
var width, height: Int
var buffer: [Character]
init(_ width: Int, _ height: Int)
{
self.width = width
self.height = height
buffer = [Character](repeating: " ", count: width*height)
}
subscript(_ index: Int) -> Character
{
return buffer[index]
}
}
class Viewport
{
var buffer: Buffer
var offset = 0
init(_ buffer: Buffer)
{
self.buffer = buffer
}
func getCharacterAt(_ index: Int) -> Character
{
return buffer[offset+index]
}
}
class Console
{
var buffers = [Buffer]()
var viewports = [Viewport]()
var offset = 0
init()
{
let b = Buffer(30, 20)
let v = Viewport(b)
buffers.append(b)
viewports.append(v)
}
func getCharacterAt(_ index: Int) -> Character
{
return viewports[0].getCharacterAt(index)
}
}
func main()
{
let c = Console()
let u = c.getCharacterAt(1)
}
유저가 필요할 때 상향식으로 더 복잡한 API 를 허용할 수 있도록 할 수 있다