| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
- PHP객체지향
- LLM
- 디자인패턴
- dhgrp
- linux 권한
- 어댑터패턴
- 데이터베이스
- 소프트웨어설계
- Tool Calling
- 인덱스
- 객체복제
- 객체지향
- Laravel
- OOP
- ai agent
- 데코레이터패턴
- 매직메서드
- PHP
- MCP
- SQL
- docker network
- SQL문법
- mcp server
- MySQL
- 라라벨
- docker
- mcp client
- Agent Loop
- SQL기초
- ai 에이전트
- Today
- Total
목록2026/09 (16)
개발블로그
개념의미속성을 초기화한 뒤 값을 다시 대입하거나 수정하지 못하도록 제한하는 키워드 객체를 만들 때 설정한 식별자나 생성 시각처럼, 이후 유지해야 하는 값에 사용할 수 있음. 읽기 전용 속성은 PHP8.1부터 지원함 비교 : final vs readonly구분finalreadonly클래스에 적용클래스 상속 금지모든 인스턴스 속성에 읽기 전용 규칙 적용속성에 적용자식 클래스에서 속성 재선언 금지초기화 이후 속성 변경 제한메서드에 적용오버라이딩 금지적용 불가 - 동시 적용 가능 문법 class ClassName{ // 속성 선언, 아직 값은 없음 public readonly string $propertyName; // 첫 값 대입으로 초기화 public function __construct(..
개념 의미상속을 통한 확장이나 재정의를 제한하는 키워드적용 대상제한 내용클래스해당 클래스를 상속할 수 없음메서드자식 클래스에서 해당 메서드를 오버라이딩할 수 없음상수와 속성클래스 상수 (PHP 8.1 이상) - 자식 클래스에서 상수 재정의 금지속성 (PHP 8.4 이상) - 자식 클래스에서 속성 재정의 금지 일반 문법/** * 클래스에 적용 * => 해당 클래스를 상속하는 자식 클래스를 만들 수 없음 */final class FinalClass{ // 클래스 정의}/** * 메서드에 적용 * => 자식 클래스에서 해당 메서드를 재정의할 수 없음 */class MethodExample{ final public function methodName(): void { // 메서드 ..
개념 필요성서로 다른 클래스에서 같은 기능이 필요한 경우가 있음.ex) 사용자 관리 클래스와 파일 처리 클래스가 모두 로그를 기록한다고 할 때, 각 클래스에 같은 메서드를 작성하면 중복이 생기고, 기능이 바뀔 때 여러 곳을 수정해야 함 개념여러 클래스에 포함하여 재사용할 수 있는 메서드와 속성의 묶음- Trait을 포함한 클래스에서는 해당 메서드를 자신의 메서드처럼 사용할 수 있음. 문법 기본 문법trait TraitName{ // 속성 정의 private string $propertyName = "초기값"; // 메서드 정의 public function methodName(): string { return $this->propertyName; }}class..
기본값 대입 개념대입 연산자(=) = 오른쪽 값을 왼쪽 변수에 저장하는 연산자=> 숫자나 문자열을 다른 변수에 대입하면, 각 변수의 값은 독립적으로 사용할 수 있음. 이후 한 변수의 값을 변경해도 다른 변수에는 영향을 주지 않음$variableA = 값;$variableB = $variableA;// $variableB에는 대입 시점의 $variableA 값이 전달된다. 이후 $variableA의 변경을 자동으로 따라가지는 않는다. ex)// 숫자 대입$number = 10;$otherNumber = $number;$otherNumber = 20;echo $number; // 10echo $otherNumber; // 20// 문자열 대입$name = "Kim";$otherName = $name..
개념 개념특정 상황이 발생했을 때 PHP가 자동으로 호출하는 특수 메서드 ex) 존재하지 않거나 접근할 수 없는 속성을 읽으려고 하면 => __get()이 호출될 수 있음이름이 __로 시작함 사용목적객체의 기본 동작을 원하는 방식으로 제어할 때 사용 종류종류메서드호출 시점생성__construct()new로 객체 생성 시소멸__destruct()객체 소멸 시속성 읽기__get()존재하지 않거나 접근할 수 없는 속성 읽기속성 쓰기__set()존재하지 않거나 접근할 수 없는 속성에 대입객체 메서드 호출__call()존재하지 않거나 접근할 수 없는 객체 메서드 호출정적 메서드 호출__callStatic()존재하지 않거나 접근할 수 없는 정적 메서드 호출문자열 변환__toString()객체를 문자열로 사용함수..
개념 static객체가 아니라 클래스 자체에 속한 속성이나 메서드를 정의할 때 사용하는 키워드static으로 정의한 속성이나 메서드는 객체를 만들지 않고 클래스 이름으로 접근 가능 클래스 멤버]구분의미예시객체 멤버객체마다 따로 가지는 속성이나 메서드자동차의 색상, 무게클래스 멤버클래스 자체에 속하는 속성이나 메서드생성된 자동차 수, 공통 설정값클래스 상수클래스 안에 정의한 변하지 않는 값상태 코드, 타입 값 스코프 해석 연산자:: => 클래스, 부모 클래스, 현재 클래스의 정적 멤버나 상수에 접근할 때 사용 비교]연산자사용 대상예시->객체$car->startEngine()::클래스, 정적 멤버, 상수Car::getCount() 관련키워드[self]현재 클래스 자신을 가리킴정적 메서드나 클래스 상수에 접근..
네임스페이스 개념클래스 이름의 충돌을 막기 위한 이름 공간 (이름 앞에 소속 공간)네임스페이스를 두면 같은 클래스 이름이라도 서로 다른 공간에 둘 수 있다. 문법namespace 키워드로 클래스가 속할 이름 공간을 선언- 보통 파일 경로와 비슷하게 맞춰 사용함 => 클래스가 어느 영역에 속하는지 파악하기 쉽고, 자동 로딩 설정과도 잘 어울림.다, 네임스페이스와 파일 경로가 자동으로 연결되는 것은 아님. 파일 안에 직접 선언해야 함. as로 별칭을 지정 가능- 너무 추상적이거나 일관성이 없으면, 오히려 읽기 어려워 질 수 있음.- 과한 별칭은 원래 클래스의 소속을 파악하기 어려울 수 있음. EX]=> Logger 클래스의 전체 이름 = App\Service\Logger use개념다른 네임스페이스..
개념 필요성프로그램을 만들다 보면 어떤 객체는 여러 개 만들어질 필요가 없거나, 여러 개 만들어지면 문제가 되는 경우가 있다. EX] 애플리케이션 설정 정보를 관리하는 객체config1 = AppConfig()config2 = AppConfig() 만약 설정 객체가 여러 개 만들어지고, 각각 다른 상태를 가지게 된다면 프로그램 안에서 사용하는 설정값이 달라질 수 있음=> 이런 상황에서는 어느 설정값이 실제 기준인지 헷갈릴 수 있음 또 데이터베이스 연결 관리자, 로거, 캐시 관리자처럼 애플리케이션 전체에서 하나의 기준으로 관리하는 객체도 있다.이런 객체가 불필요하게 여러 개 만들어지면 상태 관리가 어려워지거나 자원이 낭비될 수 있음 의미특정 클래스의 인스턴스를 하나만 생성하고, 그 인스턴스에 접근할 수 ..
개념 필요성프로그램을 만들다 보면 기존 기능은 유지하면서, 그 앞뒤로 부가 기능을 추가해야 하는 경우가 있다. EX] 결제 기능payment.pay(10000)처음에는 결제만 처리하면 충분할 수 있다. 하지만 시간이 지나면 결제 전후로 여러 기능이 추가될 수 있다. ex) 로깅, 권한 확인, 캐싱, 알림 기능들이 기존 결제 클래스 안에 계속 추가되면, 클래스의 책임이 점점 커짐.class PaymentService: def pay(self, amount): check_permission() write_log("결제 시작") result = process_payment(amount) send_notification() write_log("..
개념 필요성프로그램을 만들다 보면 이미 존재하는 코드와 새로 사용해야 하는 코드의 형식이 맞지 않는 경우가 있음.=> 기존 코드가 기대하는 방식과 새로 연결할 객체의 방식이 다를 때, 중간에서 맞춰줄 수 없을까? ex)결제 객체가 pay(amount)라는 메서드를 제공payment.pay(10000) 그런데 새로 연동해야 하는 외부 결제 API는 다른 이름과 다른 형식의 메서드를 제공 할 수 있음external_payment.request_payment(price=10000) 기능은 비슷함 (둘 다 결제를 처리)BUT 사용하는 방식이 다르기 때문에 기존 코드에서는 바로 사용할 수 없음. 해결방법 => 외부 API를 기존 코드 형식에 맞게 감싸기 의미어댑터 패턴은 서로 맞지 않는 인터페이스를 중간에서 ..