강좌와 팁

RectangleF와 Rectangle 날짜:2021-11-20 1:44:12 조회수:261
작성자 : 소년가장
포인트 : 438
가입일 : 2020-02-02 00:50:03
방문횟수 : 54
글 42개, 댓글 27개
소개 : 자기소개
작성글 보기
쪽지 보내기
둘 다 사각영역을 표현한다는 면에서는 같지만 멤버의 타입이 다르다.
RectangleF로 구한 영역을 Rectangle로 변경할 경우 단순 대입은 안된다. 

Rectangle rt = rtf;
Rectangle rt = (Rectangle)rtf;

목적이 같아도 타입이 다르니 안되는게 당연하다. 강제 캐스팅을 해도 안된다.
대응되는 멤버가 분명하니 해 줘도 될 거 같은데 허락되지 않는다.
그래서 일일이 멤버값을 생성자의 인수로 전달하여 새로운 객체를 만드는 방법을 사용했다.

Rectangle rt = new Rectangle((int)rtf.X, (int)rtf.Y, (int)rtf.Width, (int)rtf.Height);

이렇게 하면 된다. 그러나 과연 이런 무식한 방법밖에 없을까 하는 의구심이 들었다.
분명히 ToRectangle 등의 메서드가 있을 것 같은데 보이지 않는다.
하지만 자세히 살펴 보니 딱 원하던 메서드가 있었다. 

Rectangle rt = Rectangle.Round(rtf);

Round 정적 메서드를 사용하면 멤버값을 반올림하여 Rectangle 객체를 생성해 준다.
(int)로 강제 캐스팅하는 것보다 더 합리적이고 의미도 분명하다.
다만 이 메서드가 존재한다는 것을 직관적으로 알아 내기가 어려웠다.
반대로 Rectangle 객체를 RectangleF로 대입하는 건 가능하다.

RectangleF rtf2 = rt;

더 큰 타입이니 정밀도 손실없이 변환 가능하다. 
객체 지향 라이브러리를 사용할 때는 필요한 메서드는 이미 다 있는 경우가 많으므로
검색을 잘 해 봐야 한다. 
Point와 PointF, Size와 SizeF의 관계도 비슷하다. 



오늘도 최선을 다 하자.

목록보기 삭제 수정 신고 스크랩


로그인하셔야 댓글을 달 수 있습니다.