별다른 뭔가를 안할거라면 다를게 있나? 미미하지만 성능차이도 있음. 다만 해당 프로퍼티에 대해서 내부구현의 변경이 생길때 외부에서 코드 수정의 부담이 안생기긴 할듯?
Ashtray(dnstjdwjs)2022-06-11 18:00
답글
그러면 평소에는 걍 public쓰면 되는건가? 아니면 나중에 수정하기 편하게 싹 프로퍼티로 만들어 두면 됨? - dc App
젤리루비(yjw001206)2022-06-11 18:08
public으로 하면 아무데서나 마구 읽거나 수정할 수 있고
프로퍼티로 만들면 읽고 쓰기를 막거나 읽고 쓸 때 할 작업을 지정해 줄 수 있음
익명(106.101)2022-06-11 18:16
동적할당 배열을 생각해보면 됨. 벡터에 새로운 원소를 집어넣을 경우 그냥 내부 저장소에 접근해 원소를 넣는게 다가 아님. 저장소가 다 찼는지 확인하고 만약 다 찼으면 더 큰 메모리 공간을 요청해 거기로 옮기고 뭐 그런 것들도 해야 됨. 만약 그런 점을 고려하지 않고 사용자가 내부 필드를 뭐 아무렇게나 수정하고 그러면 객체가 제대로 작동하지 않을 수 있음. 따라서 그러한 경우 객체가 안전하게 돌아가는 부담이 사용자에게 주어지게 되고, 사용자가 그 기능을 사용하기 위해 더 많은 점을 신경 쓰게 됨. 그래서 명확히 정의 된 인터페이스를 통해 사용자가 객체와 상호작용을 가질 수 있도록 허락 된 범위 너머로 접근을 막는거임.
서리한(wogudwkd12)2022-06-11 18:24
답글
좀 더 일반적으로 말하면, 자료구조에서 각 추상자료형의 가능한 연산은 그 역할과 범위가 명확히 정의되어 있지만 그 실제 구현은 엿장수 맘대로임. 따라서 그러한 추상자료형을 구현하는데 있어 사용자가 그 필드를 직접 참조하는 대신 메소드를 호출해 상호작용하는 방식을 택했고, 그게 그 이후 객체지향 프로그래밍으로 지금까지 내려오게 되었음.
서리한(wogudwkd12)2022-06-11 18:30
할 작업을 지정해 줄수 있는거 좋은건 맞는데 이 글에서는 그걸 하나도 지정 안했다는게 요지 아닌가
저는 그래도 get; set; 이라도 쓰는게 나은거같아요 문법에 뭔가 언젠간 캡슐화할거임! 시비걸지마셈! 하는게 있는거같아서
hyuckkim(monkeyhyuck)2022-06-11 18:35
답글
나도 이 댓글에 동의 - dc App
익명(49.142)2022-06-11 18:41
답글
ㅇㅇ 이거얘기였어 프로퍼티 내부 구현 없이 그냥 get; set; 이상태로 있을거면 public이랑 다를 바 없어보여서.
- dc App
젤리루비(yjw001206)2022-06-11 18:41
답글
미안... 딴 얘기 하고 있었네...
서리한(wogudwkd12)2022-06-11 19:39
C# 의 get set 은 언어 레벨에서 좀더 지원을 잘 해주고 (인라인 이라던지), get set 붙이는걸 권장함 - dc App
Forge(dcforge)2022-06-11 19:15
답글
리팩토링할때도 더 괜찮고 - dc App
Forge(dcforge)2022-06-11 19:16
답글
여담으로 리플렉션 관점에서 get set 은 결국 메소드기 때문에 IL 등으로 변경이 용이한데 비해, 필드는 이런 것들이 불가능함 - dc App
Forge(dcforge)2022-06-11 19:16
언어 자체보다는 .Net의 이야기지만 json serialize나 자동 문서화도 property대상으로 작동하는걸로 알고있슴
별다른 뭔가를 안할거라면 다를게 있나? 미미하지만 성능차이도 있음. 다만 해당 프로퍼티에 대해서 내부구현의 변경이 생길때 외부에서 코드 수정의 부담이 안생기긴 할듯?
그러면 평소에는 걍 public쓰면 되는건가? 아니면 나중에 수정하기 편하게 싹 프로퍼티로 만들어 두면 됨? - dc App
public으로 하면 아무데서나 마구 읽거나 수정할 수 있고 프로퍼티로 만들면 읽고 쓰기를 막거나 읽고 쓸 때 할 작업을 지정해 줄 수 있음
동적할당 배열을 생각해보면 됨. 벡터에 새로운 원소를 집어넣을 경우 그냥 내부 저장소에 접근해 원소를 넣는게 다가 아님. 저장소가 다 찼는지 확인하고 만약 다 찼으면 더 큰 메모리 공간을 요청해 거기로 옮기고 뭐 그런 것들도 해야 됨. 만약 그런 점을 고려하지 않고 사용자가 내부 필드를 뭐 아무렇게나 수정하고 그러면 객체가 제대로 작동하지 않을 수 있음. 따라서 그러한 경우 객체가 안전하게 돌아가는 부담이 사용자에게 주어지게 되고, 사용자가 그 기능을 사용하기 위해 더 많은 점을 신경 쓰게 됨. 그래서 명확히 정의 된 인터페이스를 통해 사용자가 객체와 상호작용을 가질 수 있도록 허락 된 범위 너머로 접근을 막는거임.
좀 더 일반적으로 말하면, 자료구조에서 각 추상자료형의 가능한 연산은 그 역할과 범위가 명확히 정의되어 있지만 그 실제 구현은 엿장수 맘대로임. 따라서 그러한 추상자료형을 구현하는데 있어 사용자가 그 필드를 직접 참조하는 대신 메소드를 호출해 상호작용하는 방식을 택했고, 그게 그 이후 객체지향 프로그래밍으로 지금까지 내려오게 되었음.
할 작업을 지정해 줄수 있는거 좋은건 맞는데 이 글에서는 그걸 하나도 지정 안했다는게 요지 아닌가 저는 그래도 get; set; 이라도 쓰는게 나은거같아요 문법에 뭔가 언젠간 캡슐화할거임! 시비걸지마셈! 하는게 있는거같아서
나도 이 댓글에 동의 - dc App
ㅇㅇ 이거얘기였어 프로퍼티 내부 구현 없이 그냥 get; set; 이상태로 있을거면 public이랑 다를 바 없어보여서. - dc App
미안... 딴 얘기 하고 있었네...
C# 의 get set 은 언어 레벨에서 좀더 지원을 잘 해주고 (인라인 이라던지), get set 붙이는걸 권장함 - dc App
리팩토링할때도 더 괜찮고 - dc App
여담으로 리플렉션 관점에서 get set 은 결국 메소드기 때문에 IL 등으로 변경이 용이한데 비해, 필드는 이런 것들이 불가능함 - dc App
언어 자체보다는 .Net의 이야기지만 json serialize나 자동 문서화도 property대상으로 작동하는걸로 알고있슴
Reflection 사용할때도 property로 선언해놔야 사용할 수 있음