함수 vs 메서드 , TDA 법칙
함수 vs 메서드
모던 자바 인 액션을 읽는 중, 책에서 설명을 할 때 메서드와 함수를 다른 의미로 사용하는 듯 했다.
함수와 메서드는 같은 의미지 않나라는 생각이 들었고, java 공부를 시작하면서 함수라는 단어는 사용을 잘 안 한듯한 느낌이 들었다.
함수와 메서드의 용어에 대해서 생각해보게 되었다.
함수
프로그래밍 언어에 있어서 함수라는 것은 어떠한 기능을 수행하는 것이다.
메서드
메서드도 함수처럼 어떠한 기능을 수행하는 것인데, 차이가 있다면 메서드는 클래스와 연관되어 있는 함수라는 것이다.
클래스 내에 선언되어 있는 함수가 바로 메서드다.
정리
클래스 및 객체와 연관되어 있는 것이라면 메서드고, 그것들과 상관없이 독립적으로 존재하는 것은 함수다. 함수가 메서드보다 더 큰 개념이라고 생각할 수 있다. Java 클래스에서 함수라는 용어를 사용하지 않았던 것은, Java는 모두 클래스로 이루어져있고 클래스 밖에 어떠한 것도 선언할 수 없기 때문이었다.
TDA(Tell don’t ask) 법칙
데이터를 물어보지 않고, 기능을 실행해 달라고 말하는 규칙이다.
if (member.getExpiryDate() != null &&
member.getExpiryDate().getDate() < System.currentTimeMills()){
// 만료 되었을 때 처리
}
데이터를 읽는 것은 데이터를 중심으로 코드를 작성하게 만드는 원인이 되며, 절차 지향적인 코드가 된다.
데이터 대신에 기능을 실행해달라고 해야한다. 만료 일자 데이터를 가진 객체에게 만료 여부를 확인해 달라고 해야한다.
if (member.isExpired()) {
// 만료에 따른 처리
}
기능 실행을 요청하는 방식으로 코드를 작성하면, 해당 기능을 어떻게 구현했는지 여부가 감춰진다. 기능 구현이 캡슐화가 되는 것이다.