본문 바로가기

일기

2023-02-14

목터뷰 조사한 내용 정리 2일차...

 

 

 

 

 

 

 

7. Call by reference란 무엇이고 보통 어떻게 쓰이나요?

Call by reference

참조에 의한 호출은 참조(주소) 를 직접 전달하는 방식

인자로 받은 값의 주소를 참조하여 직접 값에 영향을 준다. 간단히 말해 값을 복사를 하여 처리를 하느냐, 아니면 직접 참조를 하느냐 차이다.

  • 함수가 호출될 때, 메모리 공간 안에서는 함수를 위한 별도의 임시 공간이 생성된다. (함수 종료시 사라짐)
  • 참조에 의한 호출방식은 함수 호출시 인자로 전달되는 변수의 레퍼런스를 전달한다.(해당 변수를 가리킨다)
  • 함수 안에서 인자의 값이 변경되면, 함수 호출시에 있던 변수들도 값이 바뀐다.

Call by value

값에 의한 호출은 메서드를 호출할 때 값을 전달하는 방식

함수에서 값을 복사해서 전달하는 방식으로 인자로 전달되는 변수를 함수의 매개변수에 복사한다.

이렇게 복사되면 인자로 전달한 변수와는 별개의 변수가 되며, 매개변수를 변경해도 원래의 변수에 영향을 미치지 않는다.

따라서 원본 값을 바꿀 필요가 없는 경우에는 이 방식을 이용하는 것이 좋다.

  • 함수가 호출될 때 메모리 공간 안에서는 임시의 공간이 생성된다. 그리고 함수가 종료되면 해당공간은 사라진다.
  • 함수 호출시 전달되는 변수의 값을 복사하여 함수의 인자로 전달한다.
  • 복사된 인자는 함수 안에서 지역적으로 사용하는 변수이다.
  • JAVA의 경우 함수에 전달되는 인자의 데이터 타입에 따라서 (기본자료형 / 참조자료형) 함수 호출 방식이 달라짐

 

정리

참조에 의한 호출이라고 하며, 참조(주소)를 직접 전달하는 방식이다.
이러한 특징으로 인해서 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 주는데 이는 함수 안에서 인자의 값이 변경되면 함수 호출시에 있던 변수들도 값이 바뀌게 된다.

값의 변경이 필요한데 원본의 값의 변경이 필요한 경우에 이 방법을 사용한다.

하지만 자바 자체에서는 call by value 만을 지원하기 때문에 자바에서는 실제로 call by reference 를 사용하는 것 처럼 보여도 객체를 메소드 인자로 넘길 때 참조하고 있는 지역 변수를 가리키는 값을 새로운 지역 변수를 생성(복사) 해서 가리킨다.

즉, 같은 주소를 가리키기 때문에 참조를 넘겨서 원본을 수정을 하면 되기 때문에 이러한 방식으로 사용한다.

 

7번 질문의 다른 사람들의 답변

함수의 호출 방식 중 하나로, 참조에 의한 호출 방식입니다. 함수를 호출할 때 인자로 reference(값에 대한 참조 주소, 메모리상의 주소를 담고 있는 변수)를 전달하며 참조 타입(reference type)을 전달합니다. reference를 전달했기 때문에 인자는 일반적으로 전역 변수의 특성을 갖습니다. 그러나 참조 타입의 변수를 함수 내에서 재할당 하게 되면 원본 값이 변경된다는 위험이 있습니다. 이러한 점을 방지 하기 위해서는 reference로 다른 값을 전달하여 사용합니다. 값이 같은 다른 참조값을 만들어 사용하는 것입니다.
Call by value란, 값을 호출하는 것을 의미하고, Call by reference란 참조에 의한 호출을 의미합니다. 전달받은 값을 직접 참조하므로 값을 변경할 경우 원본도 같이 변경이 됩니다. JVM에선 힙 영역에 Object 타입의 데이터, 스택 영역에서는 그 데이터의 참조 값이 할당됩니다. 그렇기에 객체의 주소를 참조해 데이터를 수정한다고 해도 원본에는 변경이 없으므로 JAVA에서의 모든 전달 방식은 Call by value입니다.
반대 되는 개념으로 call by value 가 있는데 값을 전달하는 것이고 call by reference는 주소값을 매개변수로 넘긴다는 의미인데 엄밀히 말하면 자바에서 call by reference는 없다. 참조를 넘긴다는 의미로 사용한다면 있다고 할 수 있지만 C언어와 포인터를 통해 같이 변수 자체의 주소값을 넘기는게 아니고 결국에는 참조형 변수가 가지고 있는 주소값을 넘기는 것이기 때문이다. 하지만 일반적으로 값을 넘기면 원본은 수정이 불가능 하지만 참조를 넘길경우 원본을 수정할수 있다는 사실을 중요하게 생각하면 자바에서도 가능하다고 말할수 있을것 같다.

 

좀 더 자세히 읽어보면 도움이 된다.(뱀귤은 신이야..)

 

Java 의 Call by Value, Call by Reference

Overview Java 에서 메서드를 호출 시 파라미터를 전달하는 방법에 대해 알아봅니다. 순서는 다음과 같이 진행합니다. Call by Value, Call by Reference 차이 Java 에서의 파라미터 전달 방법 JVM 메모리에 변

bcp0109.tistory.com

 

 

 

 

8. Override 와 Overload 를 설명해주실 수 있을까요?

Override(오버라이드)

상위 클래스의 메서드를 하위 클래스가 재정의 하는 것을 의미한다.

메서드의 이름, 파라미터 갯수 및 타입 모두 동일해야 하며, 주로 상위 클래스의 동작을 상속받은 하위 클래스에서 재정의 해서 사용한다.

 

Overload(오버로드)

메서드의 이름은 같고 매개변수의 갯수나 타입이 다른 함수를 정의하는 것을 의미한다.

리턴 값만을 다르게 갖는 오버로딩은 작성 할 수 없다.

 

정리

즉, 오버로딩은 메서드의 이름은 같고 매개변수의 갯수나 타입이 다른 함수를 정의하는 것을 의미하고 / 오버라이딩은 상속 받은 메서드의 내용을 변경하는 것을 의미한다.

 

8번 질문의 다른 사람들의 답변

오버로딩(Overload)은 메소드의 이름은 같고 매개변수의 개수나 타입이 다른 함수를 정의하는 것을 의미하며 여러개의 서브프로그램 생성을 가능하게 합니다. 오버라이딩(Overriding)은 상위 클래스의 메소드를 하위 클래스가 재정의 하는 것 의미하며 메소드 이름의 절약과 예상을 가능하게 합니다. 두 기능으로 JAVA에서 다형성을 구현하고, SOLID - OCP, LSP 원칙을 지킬 수 있습니다.
Override와 Overload는 메소드(기능)의 재정의 또는 확장을 위한 개념입니다. Override는 부모 클래스의 상속을 받은 자식 클래스에서 확장하는 개념입니다. 메소드의 이름이 일치해야 하고 매개변수의 개수, 순서, 데이터의 타입이 일치해야 하며 return 타입이 일치해야 합니다. 그리고 Overload는 같은 클래스 내부에서 확장하는 개념입니다. 메소드의 이름이 일치해야 한다는 점은 Override와 같지만 Overload는 매개변수의 개수 또는 타입이 달라야 하며 return 타입도 달라야 합니다. 따라서 이 둘은 공통적으로 메소드(기능)의 재정의 또는 확장을 위한 개념입니다. 다만 Override는 메소드 하나로 여러 객체를 다루고 객체마다 다른 기능을 사용할 수 있다는 점이 다릅니다.

 


 

9. MVC 모델이란 무엇인지 설명해주실 수 있을까요?

디자인패턴 중의 하나, Model-View-Controller 의 약자로 애플리케이션을 세 가지 역할로 구분한 개발 방법론을 의미한다.

사용자가 Controller 를 조작하면 Model 을 통해 데이터를 가져오고 해당 데이터를 바탕으로 View 를 제어해서 사용자에게 전달이 된다.

이를 통해 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있게 된다.

  • Model
    애플리케이션의 정보, 데이터를 말한다. 데이터베이스, 처음의 정의하는 상수, 초기화값, 변수 등을 뜻한다.
    또한 이러한 DATA, 정보들의 가공을 책임지는 컴포넌트를 말한다.
  • View
    input 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 말한다.
    데이터 및 객체의 입력, 그리고 보여주는 출력 부분을 담당한다. 데이터를 기반으로 사용자들이 볼 수 있는 화면이다.
  • Controller
    데이터와 사용자 인터페이스 요소들을 잇는 다리역할을 한다.
    사용자가 데이터를 클릭하고, 수정하는 것에 대한 "이벤트" 들을 처리하는 부분을 말한다.

+ 디자인 패턴

프로그램이나 어떤 특정한 것을 개발하는 중에 발생했던 문제점들을 정리해서 상황에 따라 간편하게 적용해서 쓸 수 있는 것을 정리하여 특정한 "규약" 을 통해 쉽게 쓸 수 있는 형태로 만든 것을 의미한다.

 

정리

디자인패턴 중의 하나인 Model-View-Controller 의 약자로 애플리케이션을 세 가지 역할로 구분한 개발 방법론을 의미한다

Controller 통해 사용자가 조작을 하고 Model 을 통해 데이터를 가져오며 View 에서 해당 데이터를 제어해서 사용자에게 전달이 된다.

각 구성요소를 독립시킴으로써 각 팀이 맡은 부분의 개발에만 집중하여 따로 개발할 수 있어 효율성을 높일 수 있고 유지보수성, 확장성도 보장된다.

 

9번 질문의 다른 사람들의 답변

애플리케이션을 Model, View, Controller 이 세가지의 역할로 구분한 아키텍쳐 디자인 패턴 또는 개발 방법론 중 하나입니다. 사용자가 Controller를 통해 접근 한 URL에 따라서 사용자의 요청사항을 파악한 후에 그 요청에 맞는 데이터를 Model 통해 가져오고 그 데이터를 바탕으로 시각적인 표현을 담당하는 View를 제어하여 사용자에게 전달하게 됩니다. MVC의 장점은 각 구성요소를 독립시킴으로써 각 팀이 맡은 부분의 개발에만 집중하여 따로 개발할 수 있어 효율성을 높일 수 있고 유지보수성, 확장성도 보장됩니다. 그러나 복잡한 화면과 데이터의 구성이 필요한 상황이라면 Controller에 다수의 Model과 View가 복잡하게 연결되는 상황이 생길 수 있습니다. 그로 인해 새 기능이 추가 될 때마다 코드 분석이나 테스트에 어려움이 생길 수 있는데 이러한 문제점들을 보완하기 위해 MVVM 패턴 같은 해결책도 제시되고 있습니다.
Model View Controller의 약자로 애플리케이션을 세 가지 역할로 구분한 개발 패턴이다. 사용자가 Controller를 조작하면 Controller는 Model을 통해 데이터를 가져오고 그 데이터를 바탕으로 View를 통해 사용자에게 전달하게 된다. 모델은 데이터와 정보를 처리하는 비지니스 로직이 구현된 부분이다. 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 하며, 뷰나 컨트롤러에 대해서 어떠한 정보도 알지 못해야 하고, 변경이 일어나면 변경 통지에 대한 처리방법을 구현해야 한다. 뷰는 사용자가 볼 수있는 인터페이스 영역으로, 모델로 구현된 정보를 표현해준다. 모델이 가지고 있는 정보를 따로 저장하지 않아야 하고, 모델이나 컨트롤러에 대해서 어떠한 정보도 알지 말아 하고, 변경이 일어나면 변경에 대한 처리방법을 구현해야 한다. 컨트롤러는 모델과 뷰를 잇는 다리와 같은 부분으로 모델과 뷰에 대해서 알고 있어야 하며, 모델과 뷰의 변경을 모니터링해야 한다.
MVC는 Model, View, Controller의 약자이며, 각 레이어 간 기능을 구분하는데 중점을 둔 개발 방법론 중 하나입니다. Model은 데이터 관리 및 비즈니스 로직을 처리하는 부분이며, View는 비즈니스 로직의 처리 결과를 통해 유저 인터페이스가 표현되는 구간입니다. Controller는 사용자의 요청을 처리하고 Model과 View를 중개하는 역할을 합니다. Model과 View는 서로 연결되어 있지 않기 때문에 Controller가 사이에서 통신 매체가 되어줍니다.

'일기' 카테고리의 다른 글

2023-02-16  (0) 2023.02.17
2023-02-15  (0) 2023.02.15
2023-02-13  (0) 2023.02.13
2023-02-10  (0) 2023.02.10
2023-02-09  (0) 2023.02.09