-
22일차 class카테고리 없음 2023. 2. 26. 02:50
-
- 카카오톡 유저에서 들어갈 수 있는 내용은 다음과 같다. 이 내용을 기준으로 클래스를 제작하여라. 클래스 명은 User로 통일하도록 한다.다음 설명을 읽고 직접 클래스를 만드시오.
이름 전화번호 이메일 닉네임 프로필이미지 배경이미지 친구목록 즐겨찾기 목록
- 이름 전화번호 이메일 닉네임 프로필이미지 배경이미지 친구목록 즐겨찾기 목록
- 이 때 존재하지 않을 수도 있는 데이터는 다음과 같다.
- 닉네임이 존재하지 않을 수도 있다.
- 프로필이미지가 존재하지 않을수도 있다.
- 배경이미지가 존재하지 않을 수도 있다.
Dart
class User { String name; String phone; String email; String? nickName; String? profileImg; String? backGroundImg; List friends; List bookmark; User( {required this.name, //필수 속성값 required required this.phone, required this.email, this.nickName, //null일 수도... this.profileImg, this.backGroundImg, required this.friends, required this.bookmark}); } void main() { var user = User( name: '신승호', phone: '01036758620', email: 'asd@naver.com', friends:['강아지','고양이'], bookmark:['즐겨','찾기']); print(user.name); }
출력
2.다음은 UserData라는 이름의 클래스를 만드는 예시이다. 다음의 코드를 보고, 생성자를 완성하라.
void main(List<String> arguments) { UserData userData = UserData( id: "id", birth: DateTime.now(), email:"sniperfactory@naver.com", lastLoginDate: DateTime.now(), name: "스나이퍼", phoneNumber: '01023456789' ); }
Dart
class UserData { String id; DateTime birth; String email; DateTime lastLoginDate; String name; String phoneNumber; UserData({ required this.id, required this.birth, required this.email, required this.lastLoginDate, required this.name, required this.phoneNumber, }); } void main(List<String> arguments) { UserData userData = UserData( id: "id", birth: DateTime.now(), email: "sniperfactory@naver.com", lastLoginDate: DateTime.now(), name: "스나이퍼", phoneNumber: '01023456789'); print(userData.id); }
3.개발용으로 테스트 데이터가 필요할 때가 있다. 다음과 같은 더미데이터를 품은 클래스 생성자를 만드시오.
class UserData { String id; DateTime birth; String email; DateTime lastLoginDate; String name; String phoneNumber; UserData({ required this.id, required this.birth, required this.email, required this.lastLoginDate, required this.name, required this.phoneNumber, }); UserData.dummy() : id = "Dummy", name = "더미데이터", birth = DateTime.now(), phoneNumber = '010', email = "dummyDate@dummy.com", lastLoginDate = DateTime.now(); } void main(List<String> arguments) { print('id: ${UserData.dummy().id}'); print('name: ${UserData.dummy().name}'); print('birth: ${UserData.dummy().birth}'); print('phoneNumber: ${UserData.dummy().phoneNumber}'); print('email: ${UserData.dummy().email}'); print('lastLoginDate: ${UserData.dummy().lastLoginDate}'); }
출력결과 4. 클래스에 적용할 수 있는 Getter와 Setter에 대해 공부하고, 다음의 결과를 만드시오. 이 때, Getter는 멤버변수와 무엇이 다른지 설명하는 것을 정리하시오.
객체 지향 프로그래밍에서 객체의 데이터는 객체 외부에서 직접적으로 접근하는 것을 막는다.
객체 데이터를 외부에서 읽고 변경 시 객체의 무결성이 깨지기 때문.
따라서 객체 지향 프로그래밍에선 메소드를 통해 데이터를 변경하는 방법을 선호한다.
데이터는 외부에서 접근하지 않도록 막고, 메소드는 공개해서 외부에서 메소드를 통해 데이터에 접근하도록 유도한다.
메소드는 매개값을 검증해서 유효한 값만 데이터로 저장할 수 있기 때문이다. 이러한 역할을 하는 메소드가 Setter이다.
외부에서 객체의 데이터를 읽을 때도 메소드를 사용하는 것이 좋다.
객체 외부에서 객체 필드값을 사용하기 부적절한 경우가 있을 때 메소드로 필드값을 가공후, 외부로 전달한다. 이러한 역할을 하는 메소드가 Getter이다. 클래스를 선언할 때 private(내부에서만 사용 _underscore)로 선언해서 외부로부터 보호하고 필드에 대한 Setter / Getter 메소드를 작성해서 필드값을 안전하게 변경/사용하는것이 좋다.
만약 필드타입이 boolean일 경우 , Getter는 get으로 시작하지않고 is로 시작하는 것이 관례이다.
class UserData { String id; DateTime birth; String email; DateTime lastLoginDate; String name; String phoneNumber; int _age; get getAge { return this._age; } set setAge(value) { if (value > 0 && value < 150) { _age = value; } } UserData({ required this.id, required this.birth, required this.email, required this.lastLoginDate, required this.name, required this.phoneNumber, }) : _age = 25; } void main(List<String> arguments) { UserData userData = UserData( id: "id", birth: DateTime.now(), email: "sniperfactory@naver.com", lastLoginDate: DateTime.now(), name: "스나이퍼", phoneNumber: '01023456789'); print('나이는 : ${userData.getAge}살입니다.'); }
결과 class UserData { String id; DateTime birth; String email; DateTime lastLoginDate; String name; String phoneNumber; updateUserName(String name) { //이름업데이트함수 this.name = name; } UserData({ required this.id, required this.birth, required this.email, required this.lastLoginDate, required this.name, required this.phoneNumber, }); } void main(List<String> arguments) { UserData userData = UserData( id: "id", birth: DateTime.now(), email: "sniperfactory@naver.com", lastLoginDate: DateTime.now(), name: "스나이퍼", phoneNumber: '01023456789'); print('업데이트 전 : ${userData.name}'); userData.updateUserName('팩토리'); //업데이트 print('업데이트 후 : ${userData.name}'); }
결과 -