재우니의 블로그



이번은 연산자 overloading 에 대해 설명하고자 합니다.

앞에 연산자라는 말만 바꿨는데요. 연산자로 뭔가 하겠다는 의미인데요. 연산자라고 하면 +, -, *, / 등 사칙연산도 있고, 비교 연산자인 ==,!= 등 이런것들도 연산자이죠.

한마디로 연산자들을 중복해서 정의하겠다는 의미이겠죠. 메소드 오버로딩은 메소드 이름을 중복해서 정의하겠다는 의미이고요. 사실..개발자 입장에서 보면 맨날 메소드나 프로퍼티로만 작업하기에는 힘들기 때문에 개발시 객체를 더하거나 빼거나 곱하거나 할때가 있을 겁니다. 어느 객체가 큰지 작은지도 알고도 싶고요.

연산자 오버로드를 사용하면 장점이 있거든요. 정리를 하자면요.

1) 좌표, 행렬, 함수 등의 객체를 사용할때 쓰이며, 저는 잘 모르지만 물리적인 모델링을 하는데 적격이라고 하네요.
2) 화면상의 위치를 계산할때 좌표에 관련된 객체를 사용할 수 있어요.
3) 회계프로그램을 작성시 유용합니다.
4) word 나 text 분석시 문장나 구절들을 나타낼때 클래스를 사용하는데요.
    조합하기 위해 연산자 오버로딩을 사용한다고 하네요.


전에 자동차로 설명을 드린 소스로 연산자오버로딩을 구현해 보겠습니다.

먼저 소스를 보시기 바랍니다. 좀 길겁니다. ^^;




7,9번째줄의 carKinds 변수는 객체를 더할경우 각 객체마다 가지고 있는 carqty 변수의 값 1을 더하여, 더한 값을 가지고 45번째줄의 swich 문을 이용하여 변수에 값을 할당받습니다. 2가 되면 중형차, 3이 되면 대형차...

제가 그냥 만든거니까 어떻게 차가 2개 합치면 중형차가 되냐고 묻지 마세욤.

그냥..이해해 주세요..^^;






자~~ swich 문은 이미 설명드린 것이니 넘어가고요. 44번째줄의 carqty는 몇대의 차가 합쳐져 있는지를 나타내는 변수입니다. get 으로 값을 리턴 하고요. 






84번 코드부터 연산자오버로딩 소스가 나오는군요. 연산자는 메서드와 같은 방법으로 선언을 하면 되고요. 연산자를 정의하고 있다고 표시하기 위해서 operator 키워드를 명시해 줍니다. +연산자는 operator+이라는 이름을 가진 메소드이며, - 연산자는 operator- 라는 이름을 가진 메소드라고 생각을 하시면 됩니다. 84번 소스를 보면 car1과 car2의 인자값을 받아들입니다.
결과를 반환할때는 new 연산자를 이용하여 newCar 라는 객체를 생성한 후 결과값을 넣어서 리턴을 하고 있죠. 이 모든 연산자메소드는 static 메소드로 선언을 합니다. 그래서 84번 매소드에 static 이라고 명시를 했습니다.

100번줄, 103번줄 소스를 보면 + 연산자를 이용하여 객체를 더하고 있습니다.

결과값을 보면..








swich 문을 이용해서 객체의 carqty 의 값이 1+1을 해서 2가 되므로 중형차라는 값이 출력되고, 1+1해서 2가 된 값을 다시 1을 더해 3이 되어 대형차가 되었답니다. 비유가 적절했는지 모르겠네요.

c#을 어렵다고 느끼시는 분들이 많습니다. 책을 잘못 선정을 해서 어려워 포기하시는 분들, 그리고 이해가 가지 않을 정도로 어려운 문장으로 구성된 책들... 저도 전산과 출신이 아니라 컴퓨터 용어가 나오면 매우 힘듭니다.

많이 읽고 노력하시면 좋은 결과가 있을 거라 생각이 드네요. 그럼...


posted by 심재운 (shimpark@gmail.com)