"깊이"가 다른 게임개발자 허민영

유저에서 게임까지, 철학에서 코딩까지, 본질을 보는 게임개발

★철학으로 보는 코딩

식(Expression)과 문(Statement)의 개념과 차이점

허민영 2025. 3. 5. 19:41

프로그래밍에서 식(Expression)문(Statement) 은 코드의 기본적인 구성 요소이다. 이 둘은 종종 혼동되지만, 역할과 특징이 다르다.

  1. 식(Expression)
    • 값을 생성하는 코드 조각
    • 반드시 값(결과)을 반환해야 하며, 변수에 저장할 수 있다.
    • 연산(2 + 3), 변수(x * 5), 함수 호출(GetValue()) 등 값이 되는 코드들이 식이다.
    • 예제: int a = 5 + 3;, bool check = a > 2;, string text = "Hello" + "World";
    • 5 + 3은 값 8을 생성하므로 이다.
    • a > 2는 true 또는 false를 반환하므로 이다.
    • 함수 호출 GetValue()가 값을 반환하면 이다.
  2. 문(Statement)
    • 어떤 동작을 수행하는 코드 조각
    • 값이 아니라 실행을 목적으로 하며, 변수에 저장할 수 없다.
    • 예제: int a = 5;, if (a > 3) {}, for (int i = 0; i < 5; i++) {}
    • if (a > 3) {}는 조건에 따라 실행만 될 뿐 값이 없으므로 이다.
    • for (...) {} 반복문은 실행을 위한 구조일 뿐 값이 없으므로 이다.
  3. 식과 문이 혼합된 경우
    • int x = (5 + 3) * 2;
      • (5 + 3) * 2는 값 16을 생성하는 이지만, int x = 전체는 이다.
    • int result = (a > 5) ? 100 : 0;
      • (a > 5) ? 100 : 0 삼항 연산자는 이므로 변수에 저장 가능하다.

식(Expression)의 이점

  1. 조합 가능성 (Composability)
    • 식끼리 결합하여 더 복잡한 연산을 구성할 수 있다.
    • 예제: (a * 2) + (b / 2)
    • 두 개의 식 (a * 2)와 (b / 2)를 결합하여 하나의 더 큰 식을 만든다.
    • 하지만 if 문 같은 문(Statement) 은 결합할 수 없다.
  2. 변수에 저장 가능 (Reusability)
    • 식은 값이므로 변수에 저장하여 재사용할 수 있다.
    • 예제: int square = 5 * 5; // 25
    • 하지만 if 문 같은 문(Statement)은 값이 아니므로 변수에 저장할 수 없다.
  3. 함수형 프로그래밍 (Functional Programming) 지원
    • 함수형 스타일의 코드 작성을 쉽게 할 수 있다.
    • 예제: Func<int, int> square = x => x * x;
    • 람다 표현식에서 x * x가 값이므로 가능하다.
  4. 순수 함수(Pure Function) 작성 가능
    • 외부 상태를 변경하지 않고 연산만 수행하는 순수 함수 작성이 가능하다.
    • 예제: int Add(int a, int b) => a + b;
    • 입력이 같으면 언제나 같은 결과를 반환한다.
  5. 코드 간결화 (Conciseness)
    • 불필요한 코드 없이 한 줄로 표현 가능하다.
    •  if-else 문보다 식을 사용하면 코드가 더 간결해진다.
int GetMax(int a, int b) => (a > b) ? a : b;

 

6. Lazy Evaluation과 결합 가능  

  • 필요할 때만 연산을 수행하여 성능 최적화가 가능하다.
  • 처음 사용할 때만 계산되고 이후에는 캐싱된 값을 반환한다.

 

클래스(Class)는 식(Expression)인가 문(Statement)인가??

  1. 클래스 선언은 문(Statement)
    • class Player { ... } 선언 자체는 값이 아니므로 이다.
    • Player myPlayer = class Player { ... }; // 오류 발생
    • 클래스를 변수에 할당할 수 없으므로 문(Statement)이다.
  2. 객체 생성은 식(Expression)
    • new Player()는 값이므로 이다.
    • Player player = new Player();
    • new Player()는 인스턴스를 반환하므로 이다.
  3. 클래스 내부 멤버와 식
class Example
{
    public int Value = 10;  // 식
    public int GetValue() => Value * 2; // 식
    
    public void Print() { Console.WriteLine("Hello"); } // 문    
}

 

  • 필드와 프로퍼티: 값이므로
  • 메서드 중 반환값이 있는 것은
  • void 메서드는 값을 반환하지 않으므로
개념 식 (Expression) 문(Statement)
클래스 생성 선언
필드, 프로퍼티 할당 선언
메서드 (반환값 O) 반환값 O 반환값 X