프로그래밍

C# 인터페이스 프로퍼티 질문

왜 C# 인터페이스는 프로퍼티에 protected와 같은 접근 제한자를 쓸 수 없음?

예를 들어,

 

public interface IFlip

{

     public bool CanFlip { get; protected set; }

}

 

public class object : IFlip

{

     public bool CanFlip { get; protected set; }

}

 

이런 게 가능하면 object 클래스 안에서만 CanFlip을 set하고, 외부에서 IFlip을 참조해서 쓸 때는 get만 가능하게 할 수 있을 텐데

왜 이게 안 됨?

17개의 댓글

2024.03.06

왜는 잘 모르겠고.

 

public interface IFlip

{

public bool CanFlip { get; }

}

 

public class object : IFlip

{

public bool CanFlip { get; protected set; }

}

 

이렇게 하면 원하는거 해결되지 않음?

0
2024.03.06
@statover

방금 검색하다가 알긴 했는데 이유가 궁금해짐 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

0
2024.03.06
@statover

인터페이스 내부에서 해당 프로퍼티의 사용이 불가능해진다

0
2024.03.06

? 인터페이스는 멤버 변수를 못 가지고 순수추상메서드만 가져야 한다고 배웠는데 멤버는 가질 수

있음?

 

인터페이스 ㅡ 추상 클래스로 나누던가 하면 될 듯?

그리고 위 코드는 하이딩 된거 아님?

저거 어떤 타입으로 접근했냐에 따라 다른 불 변수 접근하는 거 일 걸요?

c++ 주 언어라 틀린 걸 수 있긴한데... cs 외울 땐 이리 왜움

0
2024.03.06
@RX7900XTX

근데 이거 뭔 용도임? 재정의 왜 하신거...?

0
2024.03.06
@RX7900XTX

인터페이스 내부에 구현된 프로퍼티는 abstract해서 반드시 재정의 해야합니다

0
2024.03.06
@RX7900XTX

멤버 변수는 못 가지는데, 프로퍼티는 가능해요

0
2024.03.06
@덕덕고

그것도 사실상 getter/setter를 가지고 있으니 구체화된 클래스에서 멤버 변수가 있거나 아무튼 getter/setter를 구현했을거라 가정하고 쓰는거라 오토 프로퍼티같은 backing field는 못쓰는 사실상 표기를 편하게한 추상 메서드라 볼 수 있지

0
2024.03.06

이유야 인터페이스가 접근제한이란걸 신경쓰라고 만든게 아니니까 그럴듯.. 애초에 말 그대로 상호간 인터페이스 용도로 만들어졌는데 상대 구현부의 접근제한자를 알 필요가 있을까

그냥 은닉된 상태로 있으면 될 뿐

0
2024.03.06
@postback

근데 재밌는게 C# 8.0부터는 또 인터페이스에서 프로퍼티에 접근 제한자를 설정할 수가 있음. 문제는 이러면 클래스에서 해당 프로퍼티를 명시적으로 구현해야 함....

0
2024.03.06
@덕덕고

이거 나도 이해가 안 되는데 아무래도 추상화 관점에서 보면 안 쓰는게 맞는거같음

0
2024.03.06
@postback

그럼 궁금한 게, 쉽게 비유하자면 내가 동물이라는 Abstract 클래스를 만들고 이를 상속하는 개랑 고양이 등등을 쫘락 만들었어.

근데 내가 점프라는 기능이 필요해서 관련 기능을 인터페이스에 넣고 이 기능이 필요한 동물들에 해당 인터페이스를 상속시켜서

마치 유니티의 컴포넌트처럼 부착이 쉽게 되도록 하고 싶은 거거든?

근데 Interface를 이런 기능으로는 못 쓴다는 거지? 그럼 이런 경우에 좋은 설계 방식이 있을까?

0
2024.03.06
@덕덕고

흠 아무리 봐도 이건 문법 문제가 아니라 디자인 패턴을 공부하셔야 하는 문제인거 같은데요?

인터페이스로 굳이 하고 싶다면 SOLID 중 I(인터페이스 분리 원칙)에 해당되는 걸 하고 싶은 거잖아요?

 

예를 들면 프린터가 있는데 fax, print, scan이라는 기능이 있다고 하는데 라인업(복합기라고 하긴하는데 이건 대충 패스)에 따라 저 3가지 중 1~3개를 써야 한다고 가정합시다.

그라면 abstract class IPrinter에 fax, print, scan함수를 만들고 자식 클래스에서 재정의 해야하는데 위에서 언급했듯이 어떤 프린터는 print, fax까지만 되고 어떤건 print만 되고 어떤건 다 된다고 가정한다면

굳이 재정의 할 필요없는 함수들을 강제적으로 재정의 해야한다는 문제가 발생하겠죠?

 

그렇다면 fax, print, scan을 함수로 만들지말고 따로 따로 인터페이스로 만들어야 됨

interface IFax, interface IPrint, interface IScan이걸로 분리해서

필요한 기능이 있는 인터페이스를 자식 클래스에서 다중 상속하면 됨(c#에서는 interface만 다중 상속 가능)

 

예를 들면 복합기라는 class가 있다면

class 복합기 : IFax, IPrint, IScan

{

void override fax { 재정의 }

void override print { 재정의 }

void override scan { 재정의 }

}

 

만약 fax기능만 필요없다면

class 2가지 기능 복사기 : IPrint, IScan

{

void override print { 재정의 }

void override scan { 재정의 }

}

 

대충 이런식의 디자인 패턴 원칙임

 

0
2024.03.06
@덕덕고

그런데 원하는 걸 대충 보니 최상위 클래스를 통해서 굳이 쩜프를 가져서 자식단에서 정의해야 하는지가 의문임

 

누가봐도 jump 클래스 따로 만들어서 점프 키 입력시 jump.Action()이런식으로 class Jump의 Action 메서드를 호출하면 되는거 아님?

전략, 상태 패턴 이런거 쓰던가 아님 걍 컴포넌트 패턴으로 빼셈

점프 로직이 런타임 중 바뀌어야 한다면 전략 쓰고

아니면 걍 상태 패턴 아님 컴포넌트로 빼면 됨

 

사실 뭐써도 될거 같긴한데... 그냥 점프 로직을 캡슐화해야 하니깐 걍 클래스 따로 파는 거임

그럼 최상위 부모 동물에 예를 들면 Jump 컴포넌트를 멤버로 가지고

자식 단(개 또는 고양이)에서 Jump 컴포넌트를 상속받는 자식 컴포넌트를 동적할당하면 깔끔해짐

 

원하는게 유니티 컴포넌트 넣다 빼듯이 원한다면 걍 ㄹㅇ 컴포넌트 패턴 쓰면됨

이 동물은 jump가 없다면 걍 컴포넌트 안 붙여주면됨(단 null 체크를 하는 로직은 필요하겠죠?)

 

 

0
2024.03.06
@RX7900XTX

어뎁터, 컴포넌트, 전략, 컴포넌트 이거 입맛 맞는걸로 쓰면 될 듯?

4개다 약간씩 용도가 다르긴한데 걍 대충 4개만 공부해도 저런 인터페이스로 하는 것보다는 좋을 듯?

0
2024.03.07
@RX7900XTX

바로 OK입니다 디자인패턴 좀 보러 가겠습니다 감사!!!!!!!!!!!!!!!!

0
2024.03.06
@postback

C++이면 다중상속으로 해결될 것 같은데 C#은 안 되더라고

0
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜 조회 수
5689 [프로그래밍] 엥 구글 플러터 유기각 재는거임?? 4 최수연 0 19 시간 전 186
5688 [프로그래밍] 반도체 장비 업계인 있음? 9 캡틴띠모 0 1 일 전 210
5687 [프로그래밍] 안드로이드 책 추천좀 6 집에가게해줘 0 2 일 전 126
5686 [프로그래밍] 폰 스크리닝 해 본 사람 있어? 3 무지개빛푸딩 0 2 일 전 358
5685 [프로그래밍] jsp 트리메뉴 만들고있는데 구상한게가능한지 의견좀물어볼께 11 평택국 0 3 일 전 142
5684 [프로그래밍] JPA 도와줘어억 ㅠ 10 모그리또 0 3 일 전 222
5683 [프로그래밍] 의사는 뽑는 인원 제한하는데 부캠은 왜 제한 안 할까 5 조강현 0 5 일 전 350
5682 [프로그래밍] 그 혹시 게임쪽 종사자 있음? 17 god79ii 0 9 일 전 616
5681 [프로그래밍] 코린이 ㅅㅂ 뭐가 문젠지 모르겠어요 9 집에가게해줘 0 9 일 전 436
5680 [프로그래밍] Dear Imgui 라고 아시나요? 2 년째모쏠 0 9 일 전 239
5679 [프로그래밍] 현업개발자분들 주말엔 편하게 쉴수있나요? 10 키로 0 10 일 전 843
5678 [프로그래밍] 무엇이든 물어보세요. 28 변현제 0 12 일 전 404
5677 [프로그래밍] 개발자보단 엔지니어가 취업이 잘됨 5 iillillill 2 13 일 전 713
5676 [프로그래밍] 프론트엔드 개발자 연봉 1억 넘는 사람 있어? 13 잠적자 0 13 일 전 622
5675 [프로그래밍] Exiftool 이거 일본어 못 읽는데 13 부터시작하는이세... 0 15 일 전 231
5674 [프로그래밍] 반응형 웹페이지가 내가상상한거랑 좀 다르네 4 평택국 0 16 일 전 442
5673 [프로그래밍] 고졸 FE개발자 연봉, 상황에 조언좀.. 19 쾅꿍꿍 0 16 일 전 596
5672 [프로그래밍] 물경력들 보면 책임을 이해못하는것같음 5 mils 1 17 일 전 407
5671 [프로그래밍] GPT가 코딩 다해주네 3 겜신병자 0 18 일 전 739
5670 [프로그래밍] 크로스플랫폼의 욕심은 끝이없다 4 ye 0 20 일 전 398