기기

eclipse - workspace, project, package, class 본문

Java

eclipse - workspace, project, package, class

notEmpty 2021. 1. 7. 17:49

 

1 Workspace

이름 그대로 작업 공간 을 의미합니다. 그리고 이 작업공간에 대한 여러 메타데이터가 저장됩니다. 메타 데이터는 연관된 프로젝트들을 관리합니다. 

 

1-1 metadata : all the installed plug-ins store preferences, configurations and temporary information 

  • a set of related projects
  • some configuration pertaining to all these projects
  • some settings for Eclipse itself

 

예들들어 이클립스 워크스페이스에서 tree 명령어를 통해 숨겨진 폴더까지 포함하여 찾아보면 .metadata 폴더가 있는 것을 알 수 있습니다. 

 

그리고 .metadat의 .plugins 내부를 보면 eclipse에서 Eclipse marketplace에서 설치한 프러그인들에 대한 정보를 갖고 있습니다. 

 

 

 

1-2 소스코드는 워크스페이스와 동일한 경로에 두지 않아도됩니다. 오히려 동일한 경로에 두는 것은 추천하지 않습니다. 

예를들어 A 프로젝트를 개발 중 다른 메타데이터를 적용하고 싶을때 A 프로젝트 코드는 그대로 두고 eclipse workspace만 다시 열면 됩니다. 실제로 동작도 eclipse가 재실행하게 됩니다. 

또한 A, B 프로젝트 둘다 동일한 메타데이터를 사용하려고 한다면 동일한 워크스페이스에서 개발하면 됩니다. 

프로젝트 코드는 워크스페이스에 의존적이지 않기 때문에 오히려 워크스페이스와 프로젝트를 동일한 공간에 두는 것은 추천하지 않습니다. 

 

 

2 Project

프로젝트는 워크스페이스에 생성하는 프로그램의 기초가 되는 단위입니다. 보통 프로그램이란 하나 이상의 프로젝트로 구성이 됩니다. 초급 수준에서는 그냥 "1개의 프로젝트는 1개의 프로그램이다" 라고 말해도 적당할 것 같습니다. 보통은 워크스페이스의 성격에 따라 관련있는 프로젝트들을 두어 관리합니다. 

 

 

3 Package

패키지는 클래스를 모아두는 바구니 로써 사실상 폴더의 기능과 그다지 다르지 않습니다. Project와의 차이점은 Package 는 소스 파일들 위주로 구성되어 있고, project는 package + configuration, ide관련 정보들까지 포함합니다. 

 

예를들어 웹개발에서는 xml을 이용한 Spring mybatis 기능을 패키지로 관리하여 개발합니다. 이러한 패키지명은 통상적으로 다음과 같이 명명합니다.

 

프로젝트명.중간관리명.세부관리명

 

실제 물리적으로 프로젝트명 패키지 폴더안에 중관관리명 폴더가 있고 그 안에 세부관리명 폴더가 존재합니다. 이렇게 관리하면 프로젝트가 커져 소스파일이 많아질때 큰 구조를 보는데 도움이 됩니다. '중간관리명'은 프로젝트에 따라 더 많아질 수 있습니다. 

자바를 이용해서 어플리케이션을 런칭할때 이러한 패키지 구조를 따르지 않으면 런칭을 시켜주지 않는다고도 하니 꼭 프로젝트를 진행하실 때 이러한 구조로 습관을 들이는 것이 중요해 보입니다.

 

 

4 Class

1개의 자바파일당 1개의 클래스만을 선언해야 좋은 구조라고 할 수 있습니다. public 키워드를 가진 클래스만이 파일명과 같아야 합니다. 클래스의 종류로는 여러가지가 있지만 대표적으로 DTO, DAO, Service 세가지가 있습니다.(웹개발)

 

DTO(Data Transfer Object) 또는 VO(Value Object)

데이터 클래스를 의미합니다. 예를 들면, 학생 성적같은 것이겠네요. 학생성적관리 프로그램으로 예를 들면, 말그대로 학생 성적 데이터들 입니다. 누구는 100점 누구는 50점과 같은 데이터 그 자체입니다. 다른 행위는 하지않고 정보의 전달 기능만을 합니다. 

data와 그 data에 접근을 위한 getter, setter만 가지고 있습니다. 즉, DTO는 

Database에서 Data를 얻어 Service나 Controller 등으로 보낼 때 사용하는 객체

 

DAO(Data Access Object)

데이터를 담고있는 클래스는 DTO지만 사실 데이터가 들어있는 클래스란 것은 없습니다. 데이터는 DB에 저장되어있을 뿐, 이를 전송하는 매체가 DTO일 뿐입니다. 그럼 DTO에 넣어줄 정보를 가져오는 역할은 누가할까요? 당연히 DAO입니다. DAO에서는 데이터베이스와의 연동을 목적으로하는 기능만을 수행 하고 그 외의 기능은 대부분 Service 클래스에서 맡아서 처리합니다. 

 

Service

비지니스 로직이 들어가는 부분으로 DAO가 가져온 데이터를 가공하고 처리하는 클래스입니다. 학생명 데이터를 출력하거나 50이라는 점수데이터에 "점"이라는 문자열을 붙여서 출력을 하거나 등 DAO에서 가져온 데이터를 User에게 보여주기위한 단계를 제공하는 서비스 클래스입니다.

즉 DAO로 데이터베이스를 접근하고, DTO로 데이터를 전달받은 다음, Service에서 적절한 처리를 해 반환합니다. 

 

 

 

 

참고

sas-study.tistory.com/45

stackoverflow.com/questions/13552266/eclipse-workspaces-what-for-and-why

lazymankook.tistory.com/30