Interface는 많이 들어보셨을 겁니다. 왜 쓰는 것일까요? 에 대한 질문에 대한 답은 어느 정도 하실 거라고 생각합니다. 그렇지만, 이게 쉽게 잘 와 닿는 개념은 아닐 거라 생각합니다. ps에서 많이 발생할 만한 상황을 예로 들어보겠습니다. Java에서 Comparable은 interface로 선언이 되어 있습니다. 그리고 이 인터페이스 안에는 Target과 매개변수를 비교하는 compareTo가 정의되어 있습니다. 이것은 실체는 없는 메소드로 정의가 되었습니다. '비교 가능한 기능을' 구현한 Obj입니다. 그런데, 잘 보면, 그냥 Obj는 생성자만 있을 뿐, 그 어디에도, 눈을 씻고 찾아봐도 비교를 하는 메서드가 없음을 알 수 있어요. 비교 가능 함수를 구현해 보겠습니다. compare 가능한 함..
코딩 검색 결과
rewind 함수에 대해 알아보겠습니다. 이것은 stream의 파일 위치 지시자를 시작 위치로 옮기는 함수입니다. 별 게 없어 보입니다. 사실 이는, 다음과 같습니다. 다만, error 지시자가 초기화가 되고 안 되고는 다릅니다. 이는 링크에서 except that the error 구문을 해석하시면 알 수 있습니다. 이제 예제를 몇 개 보도록 하겠습니다. 먼저 아래 예제를 보도록 하겠습니다. 문자열을 입력받고, 입력 버퍼를 초기화 하기 위해서, rewind(stdin); 을 호출해 주었습니다. 다음에 문자 하나를 입력받습니다. 의도대로 동작했을까요? chogahui를 입력하고 엔터를 입력했습니다. 프로그램의 의도는, 다음에 소문자를 입력받는 것이였습니다. 그런데, 엉뚱한 문자인 개행 문자를 입력 받았습..
c++의 STL을 쓰다 보면, 의도치 않게 공백을 포함해서 입력을 받아야 하는 경우가 있습니다. 이 때, 저는 fgets를 많이 이용합니다. 이 함수의 원형은 아래와 같습니다. 2번째 인자인 num이 눈에 보이는데요. num - 1개의 문자만큼 받거나, '\n'을 입력받거나, 아니면 EOF가 입력될 때 까지 입력을 받습니다. gets와는 다른 특성을 가지는데요. num이 없어요. 몇 byte까지 받아야 되는 정보가 없고, 단지 포인터만 넘겨줍니다. 문자열의 시작 주소만 넘겨준 상태에서, 크기를 모르는 상태에서 무한정 받아버리면 어떻게 될까요? 허용되지 않는 공간에 이상한 값을 덮어씌워 버릴 수 있어요. 안전하지 않아요. bound 조차 없기 때문입니다. 얼만큼 받을 건지에 대해서 넘겨주기 때문에, 기본적..
오버로딩과 오버라이딩의 차이는 JAVA 면접에서, 흔히 나올 수 있는 질문입니다. 이 중에 오늘은 오버로딩 (overloading)에 대해서 간단하게 알아보도록 하겠습니다. 여기에서 언급되지 않은 내용들은, 심화 편에서 이야기를 해 보도록 하겠습니다. 먼저, overload는, 클래스 내에서, 같은 메소드를 여러 개 선언하는 것을 의미합니다. 예를 들어, ArrayList 클래스를 봅시다. List에 넣을 item 하나를 받는 add 메서드가 있습니다. 그리고 특정한 위치와, List를 넣을 item을 받는 add 메서드가 있어요. 분명한 것은 이 두 메서드의 이름은 add로 같았다는 것입니다. 오버로딩을 언제 쓰면 좋을까요? 부터 생각해 봅시다. ArrayList의 맨 뒤에 item을 추가하는 기능. ..
월별로 주문 횟수를 출력하세요. 혹은 요일별로 주문 횟수를 출력하세요. 정도는 많이 나오는 쿼리 중 하나입니다. 오늘은 이 중, 요일별로 주문 횟수를 출력하는 방법을 알아보도록 하겠습니다. sakila 데이터 베이스에는 rental 테이블이 있습니다. 오늘은 그것을 가지고 놀아보겠습니다. 먼저, 두 함수를 보도록 하겠습니다. date를 넘겨주면, dayofweek는 수를, dayname은 요일 이름을 돌려줍니다. 예를 들어서, date가 '2020-03-20'이라고 한다면, 후자의 리턴 값은 'Friday'가 됩니다. 문제는 dayofweek가 리턴하는 정수 값입니다. 위 표는 해당 date가 무슨 요일 (오른쪽) 일 때, 어떤 값을 리턴하는지 (왼쪽) 나타낸 것입니다. 만약에, '2020-03-20'이..
최근댓글