PHP에서 함수(Utility Functions) vs 클래스(Utility Class)
언어도 용도에 따라 적합한쪽의 것을 사용하는것 처럼 함수와 클래스 어느것이 위에 있고 아래에 있는것은 아닙니다.
용도에 따라 훨씬 좋은 방식으로 사용 할 수 있는 것이죠 예를 들면 시장에서 닭을 자를 때 쓰는칼과 요리할때 야채를 써는 칼은 서로 용도가 다른것 처럼 말입니다.
* 함수
1-1) 함수 장점
- 간단함: 함수를 정의하고 불러오는 방식이 매우 직관적입니다.
- 초기 학습 곡선이 낮음: 객체 지향 프로그래밍(OOP)에 대한 이해가 필요 없습니다.
- 가벼움: 클래스의 오버헤드 없이 필요한 함수만 불러올 수 있습니다.
1-2) 함수 단점
- 네임스페이스 충돌: 여러 파일에서 동일한 이름의 함수가 있을 경우 충돌이 발생할 수 있습니다.
- 확장성: 코드의 재사용성과 유지보수성이 떨어질 수 있습니다.
- 조직화: 함수가 많아질수록 관리하기 어려워집니다.
* 클래스
2-1) 클래스 장점
- 조직화: 관련된 함수들을 하나의 클래스에 모아두면 코드가 더 조직적으로 보입니다.
- 네임스페이스 관리: 클래스 내에 함수를 정의하면 네임스페이스 충돌을 피할 수 있습니다.
- 확장성: 상속과 다형성을 이용하여 기능을 쉽게 확장할 수 있습니다.
- 캡슐화: 클래스 내부에 private 메서드를 사용하여 내부 로직을 숨길 수 있습니다.
2-2) 클래스 단점
- 초기 설정: 클래스를 정의하고 인스턴스를 생성하는 과정이 필요합니다.
- 오버헤드: 함수 호출 시 클래스 인스턴스 생성 및 관리에 약간의 오버헤드가 발생합니다.
- 학습 곡선: OOP 개념을 이해하고 있어야 합니다.
클래스 확장성이 좋다고 말하지만 상속 받고 상속 받고 상속 받고 많으면 이것 찾아서 수정하게 될때 간단하지 않습니다.
전 직관적인것은 선호하는 편입니다. 함수를 사용 했을 단점이 분명히 있는 부분이 있는데 이런 부분만 클래스를 사용하면 좋을 텐데요.
객체 생성을 해야 하는것이 아니라면 PHP에서 정적클래스가 있습니다.
이 정적 클래스를 사용하면 오버헤드가 적어 메모리 사용량도 함수와 비슷하고 호출도 빠르게 됩니다.
클래스는 같은 성격의 메소드를 하나로 묶어서 패키지화 시킨 형태로 실행 하면 되는데
함수는 같은 성격의 함수를 여러개를 묶을 수 없으니 함수명 앞에 명칭을 공통으로 주고 뒤쪽에 행동에 관한 명칭을 주는 방식을 많이 사용 합니다.
예를 들면
함수는: mysql_query mysql_fetch mysql_close
클래스는:
$mysql->query() $mysql->fetch() $mysql->close()
Mysql::query() Mysql::fetch() Mysql::close()