class에서 (설계도)를 이용하여 객체를 찍어내는 행동들을 새로운 프로그래밍 패러다임에서 객체지향 프로그래밍으로 발전되어 왔다
객체지향 프로그래밍이 필요한 이유는 뭘까?
ex)
골프 연습장 회원관리, 날씨, 영화와 관련된 정보 앱을 만든다
공통점이 있다
데이터를 다루는 부분이다
골프장 연습장 회원관리 앱을 생각해보자
해당 골프장의 연습 테이블과 테이블 자리 또는
회원의 이름 전화번호 등이 필요하다
회원 관리 틀
이름 :
나이 :
전화번호 :
주소 :
등등...
데이터는 더 만들수도 있고 줄일수도 있다
내가 필요한 데이터의 틀을 만들어 놓고 각기 다른 정보를 가진 회원들이 오면 그 회원들의 정보를 찍어낼수 있는 것이다
연관성이 있는 데이터들을 묶는것이 객체 지향 프로그램의 출발점이라고 생각하자
즉, class 와 struct(구조체)를 만드는 이유는 필요한(의미있는) 데이터를 묶음으로 만들려는 것이고 이러한 과정들을 모델링 이라고 한다 -> 데이터를 담는 바구니를 만드는것 = 모델링 한다
이 모델링의 방법에서 class나 struct가 있는 것이다
이유
사용하려는 모델 설계
-Data Transfer object(DTO)/VO : 관련 데이터를 한 곳에 담는 역할
-Data Access Object(DAO): 데이터 처리(비즈니스로직)
-Helper Object: 유틸리티(도움주는 기능/ 날짜,시간.통화,인코딩)
프레임워크(애플이 미리 설계해 놓은 class나 struct를 사용하기 위함이다
어떠한 설계도 틀을 비교할때 카카오톡 친구목록을 예로 들수 있다 서버와 통신하면서 어떠한 데이터(친구정보)를 가져와서 메모리에 저장하여 사용하는 등... 좋은 예시인거 같다
그렇다면 언제 class와 struct를 사용해야 할까??
데이터 관점에서는 변수나 상수보다 가볍게 사용하는거보다 더 무겁게 사용하려는것이 구조체이다
stack영역을 사용하면서 데이터를 class보다 삭제 및 생성이 빠르다 그리고 메모리에 오랫동안 저장되지 않고 상속이 없기 때문이다
(애플에서는 간단하게 말하면, class가 꼭 필요하지 않은경우 struct구조체를 사용하라고 권장을 한다)
무거운 기능들이 반드시 필요한지 따져봤을때 필요없다면 구조체(struct)를 많이 이용하자
*내가 어떤 프로젝트를 만드는지에 따라 적합성에 따라 선택할수 있어야 한다 즉, 정답은 없다
-연관 데이터들을 단순히 캡슐화 하는것이 목적일때는 구조체
-묶은 데이터를 참조하는(오잉 참조면 class인대)것보다 복사해서 사용하는 것이 효율적일때 구조체 사용
-구조체에 저장된 속성들이 value type이며 복사하는것이 더 합당할때 구조체 사용 (참조보단 복사 위주!)
class는???
-데이터에 상속구조가 필요하다면 class사용
-데이터를 서버로 전송,저장할때는 class사용
~~
class는 구조체보다 느린 이유를 메모리 구조를 보면서 다시 기록해보자