자바 질문있습니다.

자바 질문있습니다.

작성일 2023.03.05댓글 2건
    게시물 수정 , 삭제는 로그인 필요

class Controller
{ private Service service; 
public Controller() { this.service = new Service();
} 
public void print()
{ System.out.println(service.message()); } } 
class Service { 
public String message()
{ return "Hello World!"; } }


코드인데 변수 선언 후 생성자를 통해 new연산자를 활용하는 이유가 있나요? 처음부터 Service 객체 생성 후 출력하면 될 것 같은데요



profile_image 익명 작성일 -

나중에 더 Java같은 객체지향 프로그래밍이나 소프트웨어에 대해 배우시다보면 MVC나 MVP, MVVM등 여러 디자인 패턴등에 대해서도 배우시게 될겁니다.

세부 구현이나 개념은 조금씩 다르겠지만, 요점은 실제 출력을 담당하는 로직과, 비즈니스 로직 (DB의 DAO나 내부 서비스 처리 로직), 그리고 중간 제어를 담당하는 부분으로 나눈다는 것입니다.

Service 클래스는 여기서 비즈니스 로직 (외부와 통신하여 실제 작업을 수행하거나 데이터를 가지고있는) 으로 보이고,

Controller 클래스는 이를 System 콘솔 (View) 에 출력하는 외부 UI 처리 담당을 맡으려고 했을 것으로 보입니다.

규모가 작은 코드에서는 질문자님 말씀대로 이 구조가 매우 불합리해 보일 수 있을 수 있습니다만,

(실제로도 불필요하죠)

점점 코드의 양이 증가하면 외부 UI로 보여지는 코드 자체도 양이 방대해 지므로

이를 분리해서 처리해야할 필요성을 느끼실 때가 추후 올 것 같습니다.

이런 기법들이 좋으니 꼭 적용해야 한다기보단, 그냥 그렇게 분리되어 로직을 구성하면 유지보수 등이 유연한 구조가 된다... 정도이고,

프로젝트 상황에 맞추어 적용하면 됩니다.

profile_image 익명 작성일 -

컨트롤러 클래스가 가지고 있는 서비스 타입 멤버변수 서비스를 컨트롤러 안의 모든 곳에서 활용하기 위함입니다.

위 코드처럼 print() 메서드 에서만 서비스가 쓰인다면 말씀하신것처럼 작성해도 상관이 없습니다.

다만 다른 메서드에도 동일한 서비스 객체가 사용되는 경우에는 일일히 생성해야하는 번거로움이 있고 이는 프로그램의 유지보수 등에 좋지 않은 코드입니다.

코드의 재사용성을 위해 저렇게 작성한 것으로 보입니다.

안녕하세요 자바 질문있습니다.

대학교 과제를 만들고 있는데요. keylistener의 keypressed를 이용해서 캐릭터를 움직이는 것을 구현했습니다. 그런데 방향키를 꾹 누르면 한 칸 움직였다가, 0.5초?...

자바스크립트 함수에 대해 질문있습니다.

안녕하세요 현재 자바스크립트를 공부중인 초보자입니다. 자바스크립트를 공부하다 함수에 대해 알게 되었는데 문법으로만 봤을땐 이해가 어느정도 되는것같은데 직접...

자바스크립트 공부에 대해 질문있습니다.

현재 자바스크립트를 공부중인 프론트엔드 개발자 취업준비생입니다. 아직 실력이 많이 없다보니 힘든점이 많은데 인강을 보면서 투두리스트를 따라 만들때는 어렵긴하지만...

자바 질문있습니다

부모클래스에 default 생성자가 없으면 상속이 안되나요? 아래는 부모클래스 의 필드와 매개변수있는 생성자입니다. 안녕하세요. 생성자는 상속이 되지 않습니다. 부모의...

자바 질문있습니다.

[code] public class exc1 { public static void main(String[] args)throws Exception{ int[] arr= new int[10]; int arr[0] =Integer.parseInt("100");// 뒤에 10이...

자바 질문있습니다.

@Controller public class FileUploader_controller { @GetMapping( "/upload") public String f_upload() { return "fileUpload"; } private static final String F_PATH = "C:/Users/user8241...