ComputerScience

Call by value와 Call by reference

Albosa2lol 2024. 2. 25. 05:12

Call by value와 Call by reference?

 

한줄요약

 

함수가 인자를 받는 방식에서 나타나는 두 가지 주요한 차이

 

-> 인자가 함수 내부로 전달되는 방식과 함수가 인자를 통해 수행할 수 있는 연산이 어떻게 외부 변수에 영향을 미치는지에 대한 차이를 가짐

 

 

 

Call by Value

  • 정의: Call by value 방식에서, 함수에 인자를 전달할 때 인자의 실제 값의 복사본이 생성되어 함수 내부로 전달. 이는 함수 내부에서 인자의 값을 변경해도, 그 변경이 함수 외부의 변수에는 영향을 미치지 않는다는 것을 의미
  • 특징: 함수 외부의 변수는 함수 호출 후에도 원래의 값을 유지. 따라서, 함수 내부에서 인자의 값이 변경되더라도 그 변경 사항이 외부 변수에 반영되지 않음
  • 적용 예시: 기본 데이터 타입(int, float, char 등)을 함수에 전달할 때 대부분의 프로그래밍 언어에서 call by value 방식을 사용

Call by Reference

  • 정의: Call by reference 방식에서, 함수에 인자를 전달할 때 인자의 메모리 주소가 함수 내부로 전달. 이는 함수가 인자의 실제 메모리 위치에 대한 참조를 받는다는 것을 의미, 함수 내부에서 인자의 값을 변경하면 그 변경이 함수 외부의 변수에도 반영
  • 특징: 함수 내부에서 인자의 값을 변경하면, 그 변경이 함수를 호출한 곳에서도 반영. 이는 함수가 외부 변수의 실제 메모리에 직접 작업을 수행할 수 있게 함으로써, 데이터를 직접 수정할 수 있는 능력을 제공
  • 적용 예시: 배열, 객체, 구조체 등과 같은 복합 데이터 타입을 함수에 전달할 때 많은 프로그래밍 언어에서 call by reference 방식을 사용

 

Call by Value: 값의 복사본을 함수에 전달. 함수 내부에서 인자 값의 변경이 외부 변수에 영향을 미치지 않음.

Call by Reference: 값의 메모리 주소를 함수에 전달. 함수 내부에서 인자 값의 변경이 외부 변수에 영향을 미침.

 

 

Java 가 Call by value 만 사용하는 이유? 

 

안정성과 단순성을 위해서

 

Java에서 모든 기본 데이터 타입(primitive types, 예: int, float, char 등)은 call by value 방식으로 전달.

 

이는 함수에 값을 전달할 때 그 값의 복사본이 생성되어 함수 내부로 전달되며, 함수 내부에서 이 값에 대한 변경이 원본 데이터에 영향을 미치지 않음을 의미. 이 방식은 데이터의 무결성을 유지하는 데 도움이 됩니다.

 

Call by value  단점

 

Call by value의 경우, 데이터 값을 복사해서 함수로 전달하기 때문에 원본의 데이터가 변경될 가능성이 없다. 하지만 인자를 넘겨줄 때마다 메모리 공간을 할당해야해서 메모리 공간을 더 잡아먹는다.

 

Call by reference의 경우 메모리 공간 할당 문제는 해결했지만, 원본 값이 변경될 수 있다는 위험이 존재한다.

 

 

 

+

 

 

데이터 무결성이란?

 

데이터 무결성(data integrity)은 데이터의 정확성, 일관성, 그리고 신뢰성이 유지되는 것을 의미.

 

이는 데이터가 저장, 전송, 검색 또는 처리 과정에서 부정확하게 변경되거나 손상되지 않도록 보장하는 것을 포함.

 

데이터 무결성은 데이터베이스 관리 시스템(DBMS), 데이터 저장소, 소프트웨어 애플리케이션, 네트워크 시스템 등 다양한 컴퓨팅 환경에서 중요한 개념

 

물리적 무결성

  • 데이터가 저장, 전송 중에 손상되지 않도록 보호
  • 백업, 복제, 오류 정정 코드(ECC), RAID 시스템 등을 통해 데이터의 물리적 보호를 강화

 

논리적 무결성

 

데이터베이스 내의 데이터 관계와 규칙을 유지하는 것과 관련있음:

  • 엔터티 무결성: 모든 테이블이 유일한 키(주로 기본 키)를 가지고 있어야 하며, 이 키의 값은 유일하고 null이 될 수 없어야 함
  • 참조 무결성: 외래 키 값이 참조하는 테이블의 기본 키 값과 일치해야 함.  즉, 관계형 데이터베이스 내의 모든 참조가 유효해야 함
  • 도메인 무결성: 필드의 데이터 타입, 형식, 범위 등이 정의된 규칙에 따라야 함
  • 사용자 정의 무결성: 특정 애플리케이션의 요구 사항에 맞게 설정된 규칙이나 제약 조건을 의미

 

 

참조 : https://loosie.tistory.com/486