logo

줄리아에서 구조체 속성 확인하는 법 📂줄리아

줄리아에서 구조체 속성 확인하는 법

코드

propertynames()

propertynames() 함수로 확인하면 된다1. 줄리아에는 클래스가 없고 구조체만 있으니2 이 함수로 리턴되는 모든 심볼들은 정확히 프로퍼티들만의 이름들이다.

다음은 Graphs 패키지에서 에르되시-레니 네트워크를 생성하고 노드의 수와 각 노드의 네이버후드를 확인하는 코드다. propertynames() 함수에 해당 네트워크를 집어넣어서 :nefadjlist라는 프로퍼티가 심볼로써 리턴되었다.

julia> using Graphs

julia> G_nm = erdos_renyi(50,200)
{50, 200} undirected simple Int64 graph

julia> propertynames(G_nm)
(:ne, :fadjlist)

julia> G_nm.ne
200

julia> G_nm.fadjlist
50-element Vector{Vector{Int64}}:
 [3, 4, 11, 25, 26, 27, 33, 40, 44, 48]
 [11, 17, 20, 23, 24, 38, 45, 50]
 [1, 4, 15, 24, 29, 30, 34, 42, 46]
 [1, 3, 18, 24, 30, 32, 43, 45]
 [6, 7, 8, 24, 26, 29, 37, 39, 50]
 ⋮
 [3, 13, 17, 28, 29, 32, 39, 44, 47, 49]
 [10, 14, 18, 26, 32, 36, 41, 44, 46]
 [1, 21, 23, 24, 25, 32, 41, 44, 45]
 [9, 13, 14, 17, 21, 31, 43, 46, 50]
 [2, 5, 13, 28, 31, 32, 35, 42, 44, 49]

fieldnames()

다음은 조금 어려운 이야기인데, 딱히 몰라도 줄리아 프로그래밍엔 아무 지장 없다.

propertynames(x) 는 근본적으로 fieldnames(typeof(x)) 와 같다고 한다3. 실전적으로 사용하는 함수로써는 큰 의미 없지만, 이를 통해 알 수 있는 사실은 줄리아에서 구조체structure인스턴스instance오브젝트object라 부르며 구조체 그 자체가 가지는 속성attribute필드field고 그것의 인스턴스로써 실재하는 오브젝트의 속성은 프로퍼티property라 부르는 것이다.

환경

  • OS: Windows
  • julia: v1.6.0