632
2019-01-27 10:43:30
13
싱글톤 에 대해 이해하기 위해서는 일단 컴퓨터가 메모리 관리를 어떻게 하는지를 알아야 합니다.
메모리를 사용할 때 우선 메모리의 특정영역을 사용하겠다고 선언합니다. 쉽게 말하자면 빈집이 엄청 많이 있는 아파트에서 101동에 입주민이 들어설 예정이다. 라고 예약이 잡힌 상태죠.
프로그래밍 에서는 이 집주소를 변수에 기억하는데 그것이 포인터입니다.
철수내 = 101동.
let a:학생 //a는 학생이라고 선언함.
a = 학생() //학생 객체 생성및 대입
a.이름 = 김철수 // 학생의 이름 설정
Swift 에서 let 은 상수 var은 변수 입니다.
위 예문에서 a는 상수로 선언되었음에도 값의 변경이 가능한 것은 a가 가진 정보는 학생 객체가 메모리상에서 어디에 있는지를 알 수 있는 주소값인 포인터 라는 것을 말합니다. 주소값을 상수로 잡아두고 있기 때문에 그 변수에 다른 학생을 넣을 수 없다는 의미입니다.
학생이 가지고 있는 변수는 변경 가능합니다.
철수내.납부(가스요금:10000)
이런 메서드를 실행한다고 가정할 때
만약 101동에 아무도 이사오지 않았다면 명령을 실행할 수 없죠. 이것이 널 포인터 익셉션 입니다.
메모리에 객체를 할당하기 위해서는 객체를 생성해야 합니다.
객체가 무었인가 에 대해 설명해야 겠네요.
우리가 자연에서 볼 수 있는 모든 물건이 객체라고 할 수 있습니다. 그것을 추상화 한 개념인데요.
객체는 소속 변수 및 상수 그리고 행동(메소드)를 가지고 있습니다.
사람 이라는 객체를 예로 들면
사람이 가질 수 있는 변수에는 나이, 이름, 별명, 취미, 직업 등이 있겠고 상수에는 생년월일, 출생지 등이 있겠습니다. 메서드에는 밥먹다. 잠자다. 목욕하다. 운동하다. 놀다. 등 사람이 할 수 있는 모든 행동이구요.
여기서 상속 개념을 설명 할 수 있는데.
이를테면 학생은 사람을 상속합니다.
사람이 가진 모든 변수 상수 를 사용하고 거기에 학생만이 할 수 있는 일 학생만이 가질 수 있는 변수 등이 추가됩니다.
객체를 생성한다는 것은 철수라는 학생이 언제 태어났고 성별이 무었이고 현재 몇학년 몇반이고.... 이런 정보를 입력하기 위한 준비를 하는 과정입니다.
싱글톤은 매모리 상에 오직 하나의 객체만 존재해야 하고 다른 객체에서 언제든지 그 객체를 편리하게 호출 하게 하기 위한 프로그래밍 패턴입니다.
최초 호출시 한번 생성한 객체를 프로그램이 종료할 때 까지 계속 사용하게 됩니다.
치킨집을 싱글톤으로 구현한 것은 매우 적절한 것으로 판단됩니다.