기존에 Java Application으로 작업한 프로젝트도 필요에 따라서는 Dynamic Web Project로 변환할 수 있습니다. 기존에 Web Project였음에도 불구하고 이클립스에서 인식을 못하여 Java Project로 인식하는 경우에도 Web Project로 구조를 바꾸어 줄 수 있습니다. Java Project와 Web Project구분 Java Project와 Web Project의 구분은 아이콘으로 구분하시면 됩니다. 자세히 보시면 두개의 아이콘이 다르답니다. Java Project를 Dynamic Web Project로 변환하기 1. 변환하고자 하는 프로젝트에 오른쪽 클릭을 한 후 Properties창을 켭니다. 2. 좌측 트리에서 Project Facets를 클릭한 후 Convert..
이클립스에서는 다른곳에서 받아온 프로젝트를 손쉽게 가져와서 작업할 수 있습니다. 꼭 WorkSpace안에 있는 프로젝트만 가져올 수 있는것이 아니라. 경로가 어디가 되었든 상관없이 가지고 올 수 있습니다. 오늘은 이클립스에서 프로젝트를 어떻게 가지고 오는지에 대해 포스팅 해보려합니다. 이클립스(Eclipse) 프로젝트 추가(import)하기 1. 상단바에서 File -> Import를 선택합니다. 2. 프로젝트의 형태마다 다르겠지만 폴더로 되어있는 프로젝트라면 General -> Existing Projects into Workspace를 클릭합니다. 프로젝트가 War파일로 되어있다면 Web-> War file로 import하시면 됩니다. 3. import할 프로젝트의 위치를 선택하고 Finish를 누릅..
데코레이터(Decorator pattern) 패턴이란? 데코레이터 패턴(Decorator Pattenr)은 주어진 상황 및 용도에 따라 어떤 객체에 책임(기능)을 동적으로 추가하는 패턴을 말합니다. 데코레이터라는 말 그대로 장식이라고 생각하시면 편합니다. 기본 기능을 가지고 있는 클래스를 하나 만들어주고 추가할 수 있는 기능들을 추가하기 편하도록 설계하는 방식입니다. Component : 실질적인 인스턴스를 컨트롤하는 역할 ConcreteComponent : Component의 실질적인 인스턴스의 부분으로 책임의 주체의 역할 Decorator : Component와 ConcreteDecorator를 동일시 하도록 해주는 역할 ConcreteDecoreator : 실질적인 장식 인스턴스 및 정의이며 추가된..
템플릿 메소드 패턴(Template Method Pattern)이란? 템플릿 메소드 패턴이란 특정 작업을 처리하는 일부분을 서브 클래스로 캡슐화하여 전체적인 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내용을 바꾸는 패턴입니다. 디자인 패턴이라고 하기도 뭐할정도로 객체지향 언어로 개발을 하다보면 무의식적으로 사용하는 패턴입니다. 주로 개발을 하다보면 구체적인 구현은 다르지만 기본적인 기능은 비슷한 경우가 종종 있습니다. 예를 들면 HTTP와 SMTP Client 프로그램의 경우, 주고받는 메시지의 내용이 서로 다를 뿐 둘 다 인터넷 프로토콜을 이용하여 서버에게 요청을 전달하고 결과를 수신한다는 점에서 동일합니다. 이처럼 두개 이상의 프로그램이 기본적으로 동일한 골격 하에서 동작할때 기본 골격에 해당하는..
프록시 패턴이란? 프록시는 대리인이라는 뜻으로, 무엇인가를 대신 처리하는 의미입니다. 일종의 비서라고 생각하시면 됩니다. 사장님한테 사소한 질문을 하기보다는 비서한테 먼저 물어보는 개념이라고 생각할 수 있겠습니다. 이렇게 어떤 객체를 사용하고자 할때, 객체를 직접적으로 참조 하는것이 아니라, 해당 객체를 대행(대리, proxy)하는 객체를 통해 대상객체에 접근하는 방식을 사용하면 해당 객체가 메모리에 존재하지 않아도 기본적인 정보를 참조하거나 설정할 수 있고 또한 실제 객체의 기능이 반드시 필요한 시점까지 객체의 생성을 미룰 수 있습니다. 예를 들어 용량이 큰 이미지와 글이 같이 있는 문서를 모니터 화면에 띄운다고 가정하였을때 이미지 파일은 용량이 크고 텍스트는 용량이 작아서 텍스트는 빠르게 나타나지만 ..
옵저버 패턴(Observer Pattern)이란? 옵저버패턴이란 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴입니다. 어떤 객체의 변경 사항이 발생하였을때 이와 연관된 객체들에게 알려주는 디자인 패턴이라고 생각하시면 됩니다. 옵저버 패턴에는 주체 객체와 상태의 변경을 알아야 하는 관찰 객체(Observer Object)가 존재하며 이들의 관계는 1:1이 될 수도 있고 1:N이 될 수도 있습니다. 옵저버 패턴의 장단점 장점 1. 실시간으로 한 객체의 변경사항을 다른 객체에 전파할 수 있습니다. 2. 느슨한 결합으로 시스템이 유연하고 객체간의 의존성을 제거할 수 있다. 단점..
싱글톤 패턴(Singleton Pattern)이란? 싱글톤 패턴은 객체를 딱 하나만 생성하여 생성된 객체를 프로그램 어디에서나 접근하여 사용할 수 있도록 하는 패턴을 말합니다. 개발을 하다 보면 전역적으로 하나의 객체만을 사용해야 하는 경우가 종종 있습니다. 하지만 특별히 제한을 걸어두지 않는다면 객체들이 여러 개로 복제되는 경우가 생길 수 있겠죠. 싱글톤 패턴을 사용하면 객체 생성을 단 한 번으로 제한하여 객체들이 복제되는 경우를 방지할 수 있습니다. 또한 클래스를 사용하는 여러 곳에서 인스턴스를 계속 생성하여 불필요하게 메모리 낭비를 유발할 수 있다고 판단되는 경우에도 싱글톤 패턴을 사용할 수 있습니다. 싱글톤 패턴의 장점 1. 메모리 낭비를 방지할 수 있다. 2. 싱글톤으로 만들어진 클래스와 다른 ..
소프트웨어 디자인 패턴이란? 소프트웨어 개발 방법으로 사용되는 디자인패턴(Desigin Pattern)은 과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 축적하여 그 방법에 이름을 붙여서 이후에 재사용하기 좋은 형태로 특정 규약을 만들어서 정리한 것입니다. 디자인 패턴은 소프트웨어 설계에 있어 공통적인 문제들에 대한 표준적인 해법과 작명법을 제안하며, 알고리즘과 같이 프로그램 코드로 바로 변환될 수 있는 형태는 아니지만, 특정한 상황에서 구조적인 문제를 해결하는 방식입니다. 즉 "효율적인 코드를 만들기 위한 방법론"이라고 생각하시면 됩니다. 디자인 패턴은 외우기보다는 어떠한 패턴이 있는지 알고 수많은 디자인 패턴에서 다양한 코딩 노하우를 습득하는것이 중요하다고 생각합니다. "이 코드에는 무조건 이..
이중 연결 리스트 이번 포스팅에서는 더블 링크드 리스트라고도 하는 이중 연결 리스트에 대해서 알아보고 실제로 구현해보려고 합니다.이중 연결 리스트에는 prev, next라는 이전과 다음 노드를 가리키는 포인터를 가지고 있는 연결 리스트를 말합니다. prev라는 이전 노드를 가리키는 포인터, next라는 다음 노드를 가리키는 포인터를 갖고 있기 때문에 양쪽으로 탐색이 가능하다는 장점이 있습니다. 이중 연결 리스트는 Head라는 처음을 의미하는 노드와 Tail이라는 마지막을 의미하는 노드를 가지고 있습니다. 이것을 시작과 끝으로 노드들을 추가하고 삭제하게 됩니다. 노드 추가 노드의 추가는 기존의 마지막 노드와 Tail과의 연결을 끊고 새로운 노드를 추가하여 기존 노드의 Next를 새로운 노드의 Prev에 연..
예외란? 예외란 문법적인 오류가 아닌 프로그램이 의도하지 않은 오류를 말합니다. 즉 개발자가 예상하는 동작을 제외한 나머지 전체라고 할 수 있습니다. 대부분의 경우 예외가 발생하면 시도했던 모든일들을 취소하고 그 전 상태로 되돌아가도록 프로그램을 작성합니다. 좀 더 심각한 경우라면 프로그램을 종료해야겠죠. 예외와 오류는 명백히 다릅니다. 오류가 났을때 프로그램이 터지는 현상을 막으려고 억지로 예외처리를 하여 동작시키려 하는것은 잘못된 행위입니다. 오류가 나지않도록 프로그래밍을 하는것이 가장 중요하고 오류가 난다면 그냥 프로그램이 터지도록 내버려두는 편이 낫습니다. try catch문 사용법 C언어에서는 예외처리를 조건문 if문으로 처리를 해왔습니다. if문으로 예외처리를 하는것도 잘못된것은 아니지만 좀 ..
제가 살고 있는 원룸은 저층이기도 하고 주변이 건물로 빽빽이 차 있어 환기가 쉽지 않아 항상 집안의 공기가 탁한 편이었습니다. 그래서 방 안의 공기의 질을 향상하고자 에어컨에 있는 공기청정 모드를 많이 사용하는데 요즘 들어 에어컨을 가동할 때마다 에어컨 특유의 꾸릿꾸릿한 냄새가 많이 났습니다. 이를 해결해보고자 에어컨 청소도 해보고 탈취제도 뿌려봤지만 냄새가 사라지지 않아 해결 방안을 찾아봤습니다. 청소하지 않은 에어컨에는 세균과 곰팡이가 득실거린다고 합니다. 에어컨을 켰을 때 축축한 곰팡이 냄새가 나면 즉시 청소를 해야한다고 하던데 그 특유의 에어컨 꾸릿꾸릿한 냄새가 곰팡이 냄새라는 생각이 갑자기 들더군요. 곰팡이를 제거하려면 에어컨 필터만 청소해서는 안되고 에어컨 전체를 뜯어서 내부의 곰팡이와 먼지를..
C++ 문자열 클래스(string) 기존 C언어에서는 문자열을 다루기 위해서는 char[] 배열을 사용하였습니다. 그리고 끝에 null문자 '\0'을 넣어줌으로써 문자열이 끝이났다는것을 판별하였죠. 이렇게 사용하다보니 문자열 길이도 신경써줘야 하고 사용하는 과정에서 문자열도 자주 깨지는 등의 불편한 점이 굉장히 많았습니다. 이와 같은 불편함을 줄이기 위해 C++에서는 Java나 Python과 같이 문자열을 다루는 string 클래스를 만들어 사용할 수 있게끔 되었습니다. string 클래스에서는 문자열을 객체로 다룹니다. 사용하기 편리해진 만큼 컴퓨터가 해야할 일이 많아졌다는 것을 뜻합니다. string클래스를 사용하면 char[] 배열을 사용하는 방식보다는 다소 느려지는것은 어쩔수 없는 부분이긴 합니다..
연산자 오버로딩이란? 연산자 오버로딩이란 연산자를 재정의하여 사용자가 원하는 형태로 사용이 가능하게끔 하는것을 말합니다. 대부분의 기본 제공 연산자 함수는 전역 함수 또는 클래스로 재정의 가능합니다. 오버로드 된 연산자는 함수로 구현됩니다. 이렇게 재정의된 연산자 함수는 연산자를 이용하듯 호출할 수 있습니다. 이렇게 연산자들을 함수로 만들어서 넣어주면 사용자는 훨씬 더 간결한 방법으로 코드를 작성할수도 있고 코드의 확장성도 높아집니다. 연산자 오버로딩 사용시 주의점 1. C++에서 사용되지 않는 연산자는 재정의 할 수 없습니다. 2 기본 제공 데이터 형식에 적용할때 연산자의 의미를 다시 정의할 수 없습니다. 3. 오버로딩 한 연산자는 클래스 멤버함수이거나 전역함수여야만 합니다. 연산자 오버로딩 할 수 없..