about_Objects

about_Objects

PowerShell에서 객체(Object)가 정확히 무엇인지, 객체가 어떤 데이터로 이루어져 있는지, 그리고 파이프라인을 타고 객체가 어떻게 흘러가는지를 다루는 공식 문서예요. PowerShell을 처음 시작할 때 '내가 지금 만지는 건 대체 뭘까' 싶은 순간이 오는데, 바로 그 궁금증을 풀어주는 문서랍니다.

출처: about_Objects - Microsoft Learn

본문

PowerShell에서 수행하는 모든 동작은 객체를 중심으로 이뤄져요. 데이터가 한 명령에서 다음 명령으로 이동할 때도, 그 데이터는 하나 또는 여러 개의 식별 가능한 객체로 움직여요. 그렇다면 객체란 뭘까요? 객체는 어떤 항목(item)을 나타내는 데이터의 모음이에요. 그리고 그 객체는 세 종류의 데이터로 구성되죠. 바로 객체의 타입(type), 메서드(method), 속성(property) 입니다.

타입, 메서드, 속성

객체 타입은 그 객체가 어떤 종류의 객체인지 알려줘요. 예를 들어 파일을 나타내는 객체는 FileInfo 객체죠.

객체 메서드는 그 객체에 대해 수행할 수 있는 동작이에요. FileInfo 객체에는 파일을 복사할 때 쓰는 CopyTo 메서드가 있는데, 이런 게 바로 메서드예요.

객체 속성은 객체에 대한 정보를 저장해요. FileInfo 객체에는 파일에 가장 최근에 액세스한 날짜와 시간을 담는 LastWriteTime 속성이 있어요. 이렇게 객체를 다루다 보면, 명령 안에서 그 객체의 메서드와 속성을 활용해 동작을 수행하고 데이터를 관리하게 됩니다.

객체가 가진 속성과 메서드를 확인하고 싶다면 Get-Member 명령이나 psobject라는 내장 멤버(intrinsic member)를 사용하면 돼요.

파이프라인 속의 객체

파이프라인에서 명령들이 결합되면, 각 명령은 서로에게 객체 형태로 정보를 넘겨줘요. 첫 번째 명령이 실행되면 하나 이상의 객체를 파이프라인 아래로 보내 두 번째 명령에 전달하죠. 두 번째 명령은 그 객체를 받아 처리한 다음, 새로 만들거나 수정한 객체를 파이프라인의 다음 명령으로 넘깁니다. 이 과정은 파이프라인의 모든 명령이 실행될 때까지 계속돼요.

다음 예시는 객체가 한 명령에서 다음 명령으로 어떻게 전달되는지 보여줘요.

Get-ChildItem C: | where { $_.PSIsContainer -eq $false } | Format-List

첫 번째 명령인 Get-ChildItem C: 은 파일 시스템 루트 디렉터리에 있는 각 항목마다 파일 또는 디렉터리 객체를 반환해요. 그 파일·디렉터리 객체들이 파이프라인 아래로 두 번째 명령에 전달되죠.

두 번째 명령인 where { $_.PSIsContainer -eq $false } 는 모든 파일 시스템 객체의 PSIsContainer 속성을 확인해 파일만 골라내요. 파일은 그 속성 값이 False($false)니까요. 반면 폴더는 컨테이너라서 값이 True($true)이고, 그래서 선택되지 않아요.

이렇게 파일 객체만 받은 두 번째 명령은 그 객체들을 세 번째 명령인 Format-List 에 넘기고, Format-List 는 파일 객체들을 목록 형태로 화면에 보여줍니다.

더 알아보기