PHP에서 함수(Utility Functions) vs 클래스(Utility Class) > PHP
PHP

PHP에서 함수(Utility Functions) vs 클래스(Utility Class)

조회 881회 댓글 0건

언어도 용도에 따라 적합한쪽의 것을 사용하는것 처럼 함수와 클래스 어느것이 위에 있고 아래에 있는것은 아닙니다. 

용도에 따라 훨씬 좋은 방식으로 사용 할 수 있는 것이죠 예를 들면 시장에서 닭을 자를 때 쓰는칼과 요리할때 야채를 써는 칼은 서로 용도가 다른것 처럼 말입니다. 


* 함수

1-1) 함수 장점

- 간단함: 함수를 정의하고 불러오는 방식이 매우 직관적입니다.

- 초기 학습 곡선이 낮음: 객체 지향 프로그래밍(OOP)에 대한 이해가 필요 없습니다.

- 가벼움: 클래스의 오버헤드 없이 필요한 함수만 불러올 수 있습니다.


1-2) 함수 단점

- 네임스페이스 충돌: 여러 파일에서 동일한 이름의 함수가 있을 경우 충돌이 발생할 수 있습니다.

- 확장성: 코드의 재사용성과 유지보수성이 떨어질 수 있습니다.

- 조직화: 함수가 많아질수록 관리하기 어려워집니다.


* 클래스

2-1) 클래스 장점

- 조직화: 관련된 함수들을 하나의 클래스에 모아두면 코드가 더 조직적으로 보입니다.

- 네임스페이스 관리: 클래스 내에 함수를 정의하면 네임스페이스 충돌을 피할 수 있습니다.

- 확장성: 상속과 다형성을 이용하여 기능을 쉽게 확장할 수 있습니다.

- 캡슐화: 클래스 내부에 private 메서드를 사용하여 내부 로직을 숨길 수 있습니다.


2-2) 클래스 단점

- 초기 설정: 클래스를 정의하고 인스턴스를 생성하는 과정이 필요합니다.

- 오버헤드: 함수 호출 시 클래스 인스턴스 생성 및 관리에 약간의 오버헤드가 발생합니다.

- 학습 곡선: OOP 개념을 이해하고 있어야 합니다.


클래스 확장성이 좋다고 말하지만 상속 받고 상속 받고 상속 받고 많으면 이것 찾아서 수정하게 될때 간단하지 않습니다.

전 직관적인것은 선호하는 편입니다. 함수를 사용 했을 단점이 분명히 있는 부분이 있는데 이런 부분만 클래스를 사용하면 좋을 텐데요.

객체 생성을 해야 하는것이 아니라면 PHP에서 정적클래스가 있습니다.

이 정적 클래스를 사용하면 오버헤드가 적어 메모리 사용량도 함수와 비슷하고 호출도 빠르게 됩니다.



  class Utils {
      public static function sayHello() {
          return "Hello, World!";
      }
  }

  // usage
  require 'Utils.php';
  echo Utils::sayHello();
 


클래스는 같은 성격의 메소드를 하나로 묶어서 패키지화 시킨 형태로 실행 하면 되는데

함수는 같은 성격의 함수를 여러개를 묶을 수 없으니 함수명 앞에 명칭을 공통으로 주고 뒤쪽에 행동에 관한 명칭을 주는 방식을 많이 사용 합니다.


예를 들면 

함수는: mysql_query mysql_fetch mysql_close


클래스는: 

$mysql->query() $mysql->fetch() $mysql->close()

Mysql::query() Mysql::fetch() Mysql::close()

  • 페이스북으로 공유
  • 트위터로  공유
  • 구글플러스로 공유
전체 214건 1 페이지
  • profile_image 쉽게 한번만 사용할거냐 여러번 사용할거냐에 대한 차이라고 생각해도 됩니다.특별한 경우가 아니라면 다목적으로 사용이 가능한 bindParam 를 많이 사용 합니다. 구분해서 사용하려면 또 신경을 써야 하기 때문에 그렇죠▶ bindParam() (참조 바인딩)  - 변수 자체를 바인딩 (이후 변수 값이 바뀌면 SQL 실행 시 그 값이 적용됨)  - 변수를 직접 전달해야 하고 즉시 값 대입이 불가능  - 반복문에서 같은 변수를 여러 번 사용할 경우 적합. 그리고 파라미터는 상수가 아니라 변수를 넣어줘야 합니다.△ 비유: 패스트푸드점에서 "세트 메뉴 1번"을 주문하고, 음료는 나중에 결정할 수 있는 방식    $menu = "…
  • profile_image 아래는 쿼리 문장에 문자열을 넣어주는 일반적인 방식으로 SQL 공격에 무척 취약한 방식의 예 입니다.보통 아래와 같은 문제가 발생하고 실무에선 쿼리를 보면 먼저 정보를 얻는것에서 시작을 합니다.    # SQL 인젝션이 성공하는 경우 (취약한 코드)    # 결과: SELECT * FROM users WHERE username = ''; DROP TABLE users; -- AND id = 123    $test11 = "'; DROP TABLE users; --";    $test22 = 123;    $sql = "SELECT * FROM users WHERE username = '$test11' AND id = $…
  • profile_image 문자열:s 숫자:i 이렇게 사용하는 방식은 파라미터가 많으면 복잡해서 알아보기 힘들죠그래서 만들어진 사용자 함수 입니다.    # MySQLi에서 Named Parameter처럼 사용할 수 있도록 변환하는 사용자 함수    function prepareNamedQuery($mysqliCon, string $sql, $params) {        preg_match_all('/:\w+/', $sql, $matches);        $namedParams = $matches[0];         $sql = str_replace($namedParams, '?', $sql);        $values = [];     …
  • profile_image 아래는 도메인 목록을 배열로 가지고 있다고 가정하고 만들어진 프로그램 입니다.kr의 경우 요즘은 utf8로 나오기 때문에 euckr 환경이신분은들은 캐릭터셋을 변경하는 기능이 한줄 더 들어가야 합니다.그리고 후이즈 조회는 너무 많이 하면 차단 됩니다.여기서 너무 많다는 기준은 없지만 최소 몇 백은 되기 때문에 도메인 만료일 체크하기 위해서 실행하는것에는 문제는 없습니다.    # 루트 도메인만 추출    $root_domains = [];    foreach ($domains as $domain) {        if ($domain === '_default_') continue; // 제외        if (preg…
  • profile_image 앞으로 캐릭터셋은 utf-8이 아니라 utf-8 bom을 사용해야 합니다. utf-8 캐릭터셋은 한글이 깨져서 보이는데 이때문에 예전에 ANSI로 저장(euc-kr) 처리를 많이 하곤 했습니다. 하지만 현재는 utf-8과 호환되는 utf-8 bom 사용하는 것이 좋겠지요.그래야 더 풍부한 캐릭터셋 특수문자(이모티콘)를 사용할 수 있기 때문에 그렇습니다. euc-kr은 이모티콘을 사용하지 못해요~ 엑셀(Excel)에서 CSV 파일 한글 깨지지 않게 하려면  - 엑셀에서 바로 CSV 열기: EUC-KR 또는 UTF-8 BOM 캐릭터셋 참고사항  - 글로벌 호환성 생각: UTF-8 BOM  - 서버 시스템 처리 위주: UTF…
  • profile_image csv파일 읽어서 처리할 때 날짜를 기준으로 하는데 같은 날짜가 아니라 다른 날짜로 처리 해야 되는 경우 만들어진 프로그램 입니다.csv파일의 캐릭터셋에 대해선 별도 정리가 필요한 상태이고 윈도우10 사용한지 오래 되었는데 이 문제가 업그레이드 되면서 변경 되었는지 어땟는지는 현재로선 중요하지 않고 잘 나오면 그만인거죠cmd도 예전엔 cp949로해서 처리 했는데 지금은 둘다 잘 보이는 구조로 되어 있는듯 합니다.그리고 엑셀은 euckr, utf-8 bom 두개가 문제 없으며 utf-8은 안됩니다.<?php// 공휴일 배열$holidays = [    "2025-01-01", // 신정    "2025-02-11",…
  • profile_image utf-8 bom 표시 부분이 앞 3바이트에 있는것을 삭제해서 utf-8 으로 처리하기 위해서 필요한 함수 입니다.이런것이 필요한 이유는 mb_convert_encoding 함수로 euc-kr로 변환을 하면 안되는것은 아니지만 ? 같은것이 발생합니다.그렇기 때문에 아래 함수처럼 삭제하고 처리하면 문제 없이 잘 됩니다.    function remove_utf8_bom($text) {        if (substr($text, 0, 3) === "\xEF\xBB\xBF") {            return substr($text, 3);        }        return $text;    } $ewy_ut…

상업적 이용 금지. 컨텐츠는 개인 용도로만 사용이 가능 합니다.