맨위로가기

순환 참조

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

순환 참조는 어떤 대상이 자신을 직접 또는 간접적으로 참조하는 현상을 의미한다. 이는 언어 및 논리, 컴퓨터 프로그래밍, 스프레드시트 등 다양한 분야에서 나타날 수 있다. 언어 및 논리에서는 사전의 단어 정의처럼 유용하게 사용될 수 있지만, 순환 논증과 혼동되어서는 안 된다. 컴퓨터 프로그래밍에서는 함수 간의 상호 참조로 나타나며, 종료 조건이 없으면 무한 루프를 발생시킬 수 있다. 스프레드시트에서는 셀 간의 상호 참조로 나타나며, 계산 오류를 일으킬 수 있지만, 특정 방정식의 해를 구하는 데 활용될 수도 있다.

더 읽어볼만한 페이지

  • 자기언급 - 자기 복제
    자기 복제는 스스로를 복사하는 과정으로, 생명의 기본 특징이자 컴퓨터 과학, 나노기술, 우주 개발 등 여러 분야에서 연구 및 응용되며, 코딩된 표현, 복사 메커니즘, 구성 메커니즘 등의 원리를 가지고 자연 복제자, 자가 영양 복제자, 자기 재생산 시스템, 자기 조립 시스템 등으로 분류된다.
  • 자기언급 - 재귀
    재귀는 자기 자신을 사용하여 정의되는 수학적, 컴퓨터 과학적 개념으로, 함수, 알고리즘, 다양한 분야에서 활용되며, 간결한 알고리즘 구현에 사용되지만 스택 오버플로우의 단점도 존재한다.
  • 인과관계의 오류 - 미끄러운 비탈길 논증
    미끄러운 비탈길 논증은 특정 행위를 금지하기 위해 그 행위가 용납할 수 없는 결론으로 이어질 것이라고 주장하는 논증 방식이며, 정치적 논쟁에서 부정적인 결과를 초래할 수 있다는 주장에 사용되고, 개념적, 결정적, 인과적 유형으로 나뉜다.
  • 인과관계의 오류 - 피해자 비난
    피해자 비난은 피해자의 행동이나 특성에서 사건의 원인을 찾는 현상으로, 사회 부조리를 정당화하는 이데올로기이며, 다양한 요인에 의해 전 세계적으로 발생하고 법적 문제를 야기하기도 한다.
  • 알고리즘 - 텍스트-비디오 모델
    텍스트-비디오 모델은 텍스트 입력을 기반으로 비디오를 생성하는 인공지능 모델로서, 다양한 모델들이 개발되고 교육, 홍보, 창작 산업 등 여러 분야에 활용되지만 컴퓨팅 자원 소모, 데이터 부족, 텍스트 해석 오류, 윤리적 문제 등의 한계점을 가진다.
  • 알고리즘 - 마스터 정리
    마스터 정리는 분할 정복 알고리즘의 시간 복잡도 분석 도구로서, 점화식을 세 가지 경우로 나누어 재귀 알고리즘의 효율성을 파악하고, 다양한 정렬 및 일반 알고리즘 분석에 활용되지만, 특정 조건에서는 적용이 제한될 수 있습니다.
순환 참조
순환 참조
정의마지막 객체가 첫 번째 객체를 참조하는 일련의 참조
다른 이름
영어Circular reference
일본어循環参照 (Junkan sanshō)
프로그래밍
메모리 누수참조 고리가 메모리 누수를 일으킬 수 있음. 참조

2. 언어 및 논리에서의 순환 참조

순환 참조는 논리적 오류인 순환 논증과는 혼동되어서는 안 된다. 순환 참조는 종종 무익하고 아무런 정보를 제공하지 못하지만, 사전처럼 유용한 참고 자료로 남는 경우도 있다.[2]

:''그녀의 오빠는 그녀에게 새끼 고양이를 주었고, 그의 여동생은 그에게 고마워했다.''

위 문장은 순환적이지만 의미가 있다. 자기 참조는 아리스토텔레스의 무모순율이라는 철학적 공리의 필연적인 결과이며, 자기 참조가 없으면 논리수학이 불가능하거나 유용성이 부족해진다.[2][3]

참조: 순환 정의

2. 1. 순환 논증과의 차이점

순환 참조는 논리적 오류인 순환 논증과는 혼동되어서는 안 된다. 순환 참조는 종종 무익하고 아무런 정보를 제공하지 못하는데, 예를 들어 책의 색인에서 두 항목이 서로를 참조하는 경우처럼, 순환 참조가 반드시 쓸모없는 것은 아니다. 예를 들어, 사전은 항상 궁극적으로 순환 참조가 될 수밖에 없는데, 사전의 모든 단어는 다른 단어로 정의되기 때문이다. 그러나 사전은 여전히 유용한 참고 자료로 남아 있다.[2] 순환 참조를 포함하는 문장도 의미를 가질 수 있다.

:'그녀의 오빠는 그녀에게 새끼 고양이를 주었고, 그의 여동생은 그에게 고마워했다.'

는 순환적이지만, 의미가 없는 것은 아니다. 실제로 자기 참조는 아리스토텔레스의 기본적인 철학적 공리인 무모순율의 필연적인 결과라고 주장할 수 있다. 이러한 관점에서 자기 참조가 없으면 논리수학이 불가능해지거나, 적어도 유용성이 부족해진다.[2][3]

3. 컴퓨터 프로그래밍에서의 순환 참조

순환 참조는 컴퓨터 프로그래밍에서 한 코드 조각이 다른 코드 조각의 결과를 필요로 하지만, 해당 코드가 다시 첫 번째 코드의 결과를 필요로 할 때 발생할 수 있다. 이러한 순환 참조는 종료 조건이 있는 경우에는 유효한 결과를 반환할 수 있지만, 종료 조건이 없으면 라이브락이나 무한 루프와 같은 상태를 유발하여 프로그램이 이론적으로 영원히 실행될 수 있다.

ISO 표준 SQL 순환 무결성 제약 조건은 단일 테이블 내에서는 암묵적으로 지원된다. 여러 테이블 간의 순환 제약 조건(예: 외래 키)은 제약 조건을 연기 가능으로 정의하여 허용된다.[1] 이 경우 제약 조건은 DML 문 실행 시점이 아닌 트랜잭션 종료 시점에 확인된다. 순환 참조를 업데이트하려면 단일 트랜잭션에서 두 개의 문을 실행하여 트랜잭션 커밋 시 두 참조를 모두 충족시킬 수 있다.

변경 가능한 유형의 데이터 인스턴스 간에도 순환 참조가 발생할 수 있다.[2]

http://www.postgresql.org/docs/current/static/sql-createtable.html CREATE TABLE

http://docs.oracle.com/cd/B19306_01/server.102/b14200/clauses002.htm#i1015767 DEFERRABLE Constraint Examples

3. 1. 예시

가장 가까운 예로, 마이크로소프트 엑셀에서 다음과 같이 셀 내용을 입력하면 순환 참조 오류가 발생한다.

width=32|ABC
1=B1=A1
2



셀 A1은 수식 계산을 위해 셀 B1을 참조하고, 셀 B1은 수식 계산을 위해 셀 A1을 참조하기 때문에 서로 참조가 순환되어 끝이 없게 된다.

컴퓨터 프로그래밍에서도 한 코드 조각이 다른 코드 조각의 결과를 필요로 하는데, 해당 코드가 다시 첫 번째 코드의 결과를 필요로 할 때 순환 참조가 나타날 수 있다. 예를 들어, 다음 Python 프로그램의 두 함수 posn과 plus1은 순환 참조를 구성한다.



def posn(k: int) -> int:

if k < 0:

return plus1(k)

return k

def plus1(n: int) -> int:

return posn(n + 1)



위와 같이 종료 조건이 있는 순환 참조는 유효한 결과를 반환할 수 있다. 그러나 종료 조건이 없으면 라이브락 또는 무한 루프 상태가 되어 이론적으로 영원히 실행될 수 있다.



def posn(k: int) -> int:

return plus1(k)

def plus1(n: int) -> int:

return posn(n + 1)



ISO 표준에서 SQL 순환 무결성 제약 조건은 단일 테이블 내에서는 암묵적으로 지원된다. 여러 테이블 간의 순환 제약 조건(예: 외래 키)은 제약 조건을 연기 가능으로 정의하여 허용된다. (PostgreSQL의 경우 http://www.postgresql.org/docs/current/static/sql-createtable.html CREATE TABLE, Oracle의 경우 http://docs.oracle.com/cd/B19306_01/server.102/b14200/clauses002.htm#i1015767 DEFERRABLE Constraint Examples 참조). 이 경우 제약 조건은 DML 문 실행 시점이 아닌 트랜잭션 종료 시점에 확인된다. 순환 참조를 업데이트하려면 단일 트랜잭션에서 두 개의 문을 실행하여 트랜잭션 커밋 시 두 참조를 모두 충족시킬 수 있다.

다음 Python 스크립트와 같이 변경 가능한 유형의 데이터 인스턴스 간에도 순환 참조가 발생할 수 있다.



mydict = {

"this": "that",

"these": "those"

}

mydict["myself"] = mydict

print(mydict)



`print(mydict)` 함수는 `{'this': 'that', 'these': 'those', 'myself': {...}}`를 출력하며, 여기서 `...`는 순환 참조, 즉 `mydict` 딕셔너리 자신을 나타낸다.

4. 스프레드시트에서의 순환 참조

마이크로소프트 엑셀과 같은 스프레드시트 프로그램에서 순환 참조는 수식이 직접 또는 간접적으로 자기 자신을 참조할 때 발생한다.

예를 들어, 아래 표와 같이 셀 A1과 B1이 서로를 참조하는 경우를 생각할 수 있다.

width=32|ABC
1=B1=A1
2



아래 표와 같이 셀 A1은 자기 자신을, 셀 B1과 B2, 셀 C1과 C2는 각각 서로를 참조하는 경우도 순환 참조에 해당한다.

style="min-width:2em;" |ABC
1=A1=B2=C2+5
2=B1=C1+10



이러한 순환 참조는 일반적으로 오류를 발생시키지만, Colebrook 방정식과 같은 암시적 방정식을 풀 때는 유용하게 사용될 수 있다.[4] 또한, 계산 가능한 순환 참조와 불가능한 순환 참조는 구분해야 한다.[3]

4. 1. 반복 계산

마이크로소프트 엑셀에서 다음과 같이 셀 내용을 입력하면 순환 참조가 발생한다.

width=32|ABC
1=B1=A1
2



위 표에서 셀 A1은 수식 계산을 위해 셀 B1을 참조하고, 셀 B1은 수식 계산을 위해 셀 A1을 참조한다. 이처럼 서로 참조하면 끝이 없기 때문에 오류가 발생한다. 이와 같이 두 개의 셀이 서로의 결과를 필요로 할 때 스프레드시트에서 순환 참조가 발생한다. 예를 들어, 셀 A1의 값이 셀 B1의 값에 5를 더한 값이고, 셀 B1의 값은 셀 A1의 값에 3을 더한 값인 경우, 어떤 값도 계산할 수 없다. (A1:=B1+5 및 B1:=A1-5라고 해도, A1=3 및 B1=-2가 두 수식을 모두 만족하는 것은 아니며, 두 경우를 모두 만족하는 A1과 B1의 값은 무한히 많기 때문에 여전히 순환 참조이다.)

워크시트의 순환 참조는 Colebrook 방정식과 같은 암시적 방정식 및 기타 많은 방정식을 푸는 데 매우 유용한 기술이 될 수 있다. 그렇지 않으면 VBA에서 뉴턴-랩슨 방법 알고리즘이나 매크로를 사용해야 할 수 있다.[4]

계산할 수 없는 순환 참조를 포함하는 프로세스와 최종 출력이 있는 반복 계산을 포함하는 프로세스는 구분해야 한다. 후자는 이를 처리할 수 없는 스프레드시트에서는 실패할 수 있지만, 논리적으로는 유효하다.[3] 예를 들어, 스프레드시트의 시트에 수식이 다음과 같이 입력되어 있다고 가정해 보자.

ABC
1=A1=B2=C2+5
2=B1=C1+10



위 표에서 셀 A1은 자기 자신을 참조하고 있으므로 순환 참조가 된다.

또한 셀 B1, B2는 B1이 B2를 참조하고, B2가 B1을 참조하며 영원히 반복되므로 순환 참조가 된다.

셀 C1, C2의 경우, C1은 C2의 값에 5를 더하고, C2는 C1의 값에 10을 더하는 동작을 영원히 반복하므로 이 역시 순환 참조이다. 단, 소프트웨어에 따라서는 초기값과 반복 횟수를 정하여 이러한 계산을 할 수 있다(간단한 미분 방정식이나 계승을 구하는 데 사용).

5. 한국 사회에서의 순환 참조

(주어진 원본 소스가 비어있고, 이전 출력도 비어있으므로, 수정할 내용이 없습니다. 따라서 빈칸을 출력합니다.)

6. 순환 참조의 해결 및 활용

순환 참조는 논리적 오류인 순환 논증과는 다르다. 책의 색인에서 두 항목이 서로를 참조하는 경우처럼 순환 참조가 항상 쓸모없는 것은 아니다. 예를 들어, 사전은 모든 단어가 다른 단어로 정의되기 때문에 순환 참조가 될 수밖에 없지만, 여전히 유용하다. "그녀의 오빠는 그녀에게 새끼 고양이를 주었고, 그의 여동생은 그에게 고마워했다."와 같은 문장은 순환적이지만 의미가 있다.[2][3]

컴퓨터 프로그래밍에서 순환 참조는 한 코드 조각이 다른 코드 조각의 결과를 필요로 하지만, 해당 코드가 첫 번째 코드의 결과를 필요로 할 때 발생할 수 있다. 종료 조건이 있는 경우 유효한 결과를 반환할 수 있지만, 종료 조건이 없으면 무한 루프가 발생하여 이론적으로 영원히 실행될 수 있다.

ISO 표준에서 SQL 순환 무결성 제약 조건은 단일 테이블 내에서 암묵적으로 지원된다. 여러 테이블 간의 순환 제약 조건 (예: 외래 키)은 제약 조건을 연기 가능으로 정의하여 허용된다. 이 경우 제약 조건은 DML 문이 실행될 때가 아닌 트랜잭션 종료 시 확인된다. 순환 참조를 업데이트하려면 단일 트랜잭션에서 두 개의 문을 실행하여 트랜잭션이 커밋되면 두 참조를 모두 충족시킬 수 있다.

스프레드시트에서 두 셀이 서로의 결과를 필요로 할 때 순환 참조가 발생할 수 있다. 예를 들어, 셀 A1의 값이 셀 B1의 값에 5를 더하여 얻고, 셀 B1의 값은 셀 A1의 값에 3을 더하여 얻는 경우, 어떤 값도 계산할 수 없다. 하지만 워크시트의 순환 참조는 콜브룩 방정식과 같은 암시적 방정식 및 기타 방정식을 푸는 데 유용할 수 있다.[4]

계산할 수 없는 순환 참조를 포함하는 프로세스와 최종 출력이 있는 반복 계산을 포함하는 프로세스 간에는 구별이 이루어져야 한다. 후자는 이를 처리할 수 없는 스프레드시트에서는 실패할 수 있지만 그럼에도 논리적으로 유효하다.[3]

6. 1. 문제 해결

컴퓨터 프로그래밍에서 순환 참조는 한 코드 조각이 다른 코드 조각의 결과를 필요로 하지만, 해당 코드가 다시 첫 번째 코드의 결과를 필요로 할 때 발생한다. 종료 조건이 없는 순환 참조는 무한 루프를 유발할 수 있다. 종료 조건을 명확히 설정하면 이러한 문제를 방지할 수 있다.[4]

마이크로소프트 엑셀과 같은 스프레드시트에서도 순환 참조가 발생할 수 있다. 예를 들어, 셀 A1의 값이 셀 B1의 값에 의존하고, 동시에 셀 B1의 값이 셀 A1의 값에 의존하는 경우이다.

width=32|ABC
1=B1=A1
2



위와 같이 셀 내용을 입력하면, A1은 B1을 참조하고 B1은 A1을 참조하여 무한히 반복되므로 오류가 발생한다. 이러한 경우 수식을 수정하여 순환 참조를 제거하거나, 반복 계산 설정을 통해 제한적인 해결을 할 수 있다. 하지만, 워크시트의 순환 참조는 Colebrook 방정식과 같은 암시적 방정식을 푸는 데 유용하게 사용될 수 있다.[3]

논리학에서는 순환 논증의 오류를 피하고, 건전한 논증 구조를 사용하는 것이 중요하다.

6. 2. 활용

마이크로소프트 엑셀과 같은 스프레드시트에서 셀 참조가 순환적으로 이루어지면 오류가 발생할 수 있다. 예를 들어, 아래 표와 같이 셀 A1은 B1을 참조하고, B1은 다시 A1을 참조하면 순환 참조 오류가 발생한다.

width=32|ABC
1=B1=A1
2



하지만 이러한 순환 참조가 항상 쓸모없는 것은 아니다. 사전의 경우, 모든 단어는 다른 단어로 정의되므로 순환 참조가 발생할 수밖에 없지만, 여전히 유용한 참고 자료로 사용된다. 마찬가지로, "그녀의 오빠는 그녀에게 새끼 고양이를 주었고, 그의 여동생은 그에게 고마워했다."와 같은 문장도 순환적이지만 의미가 있다.

스프레드시트에서 셀 A1의 값이 B1의 값에 5를 더하고, B1의 값은 A1의 값에 3을 더하는 경우처럼, 두 셀이 서로의 결과를 필요로 하는 경우에도 순환 참조가 발생한다. 이러한 경우, 값을 계산할 수 없다.

하지만 워크시트의 순환 참조는 콜브룩 방정식과 같은 암시적 방정식 등을 푸는 데 유용한 기술이 될 수 있다. 예를 들어, 아래 표와 같이 셀 A1은 자기 자신을, B1과 B2, C1과 C2는 서로를 참조하는 순환 참조가 발생하지만, 소프트웨어에 따라 초기값과 반복 횟수를 정하여 계산할 수 있다. 이러한 방식은 미분 방정식이나 계승을 구하는 데 활용될 수 있다.[4]

style="min-width:2em;" |ABC
1=A1=B2=C2+5
2=B1=C1+10



계산할 수 없는 순환 참조와 반복 계산을 통해 최종 출력을 얻는 프로세스는 구분해야 한다. 후자는 스프레드시트에서 실패할 수 있지만, 논리적으로는 유효하다.[3]

참조

[1] 웹사이트 Reference Cycles Can Leak Memory https://doc.rust-lan[...] Rust Team 2023-11-08
[2] 서적 The future of foreign language education in the United States https://books.google[...] Greenwood Publishing Group 2002
[3] 서적 Indices and identity https://books.google[...] MIT Press 1994
[4] 웹사이트 Solve Implicit Equations Inside Your Worksheet By Anilkumar M, Dr Sreenivasan E and Dr Raghunathan K https://web.archive.[...] 2009-06-25



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com