목록프로그래밍 (36)
여행을 개발하다

안녕하세요! 오늘은 지난 포스팅에 이어 '멤버 변수로 ArrayList가 포함된 객체를 초기화하는 방법'과, '생성자로 초기화하는 방법'에 대해 알아보고자 합니다. 이해가 조금 어려우시다고요? 지난 번 임의로 student 클래스를 만들어서 예제를 보여드렸었는데, 여기서 추가로 한 학생의 '취미(hobby)'까지 멤버 변수로 넣는다고 가정하겠습니다. 물론, 취미는 한 개이면 다행이지만, 그렇지 않을 경우를 상정해서 여러개를 받도록하죠. 그래서 변수 또한 ArrayList 자료형이 되고요, 변수명은 간단히 'hobby'로 지정합니다. 멤버 변수 초기화도 setter 대신에 생성자로 초기화할 수 있도록, 기본 생성자와 함께 또다른 생성자를 하나를 더 만들어주었습니다. 여기까지 완료되었다면, 기존에 해왔던 방..

안녕하세요! 오늘은 '스프링의 개요'와 '의존성 주입(Dependency Injection)'에 대해 알아보겠습니다. 1. 스프링 프레임워크(Spring Framework) 스프링은 자바 플랫폼을 위한 '오픈소스 애플리케이션 프레임워크(Framework)'입니다. 여기서 프레임워크란, 소프트웨어를 편리하게 제작할 수 있도록 뼈대를 이루는 클래스와 인터페이스를 미리 제작하여 모아둔 것을 의미하는데요. 프레임워크를 적시적소에 사용하면 프로그램 개발의 생산성이 올라가며, 품질이 향상된다는 장점이 있습니다. 하지만 익숙해지는데 시간이 소요된다는 것이 결국 유연성의 부족으로 이어진다는 단점도 있습니다. 스프링은 프레임워크의 일종으로 여러 클래스의 객체를 생성해주고, 조립해주는 '조립기' 역할을 합니다. 또한 크기..

안녕하세요! 오늘은 스프링(Spring)의 설치법에 대해 포스팅하고자 합니다. (단, Eclipse를 사용하고 계셔야 합니다.) 1. Spring 공식 홈페이지 접속하기 먼저 Spring 공식 홈페이지로 들어갑니다. 불편하시면 아래 링크로 곧장 들어가셔도 상관없습니다. 주소는 'spring.io'!!! 일반 홈페이지와는 조금 다르죠? spring.io 2. Tools 메뉴 선택 스크롤을 끝까지 내려주시면 아래 TEAM, SERVICES, TOOLS, STORE 등의 메뉴가 보이는데요. (왜 이렇게 숨겨놓으셨을까...) 이 중에서 TOOLS를 선택합니다!! 3. 버전에 맞는 다운로드 파일 선택 그 다음엔 버전에 맞는 다운로드 파일을 선택해야 합니다. 급하게 'DOWNLOAD STS'을 누르시지 말고, 아래..

안녕하세요!! 오늘은 JSP로 파일을 업로드 하는 법에 대해 알아보겠습니다. 모두 웹 상에서 한 번 쯤은 파일을 업로드 해보셨을텐데요. 사용자가 파일을 첨부할 수 있도록 하기 위해서는 어떻게 코딩을 해야 하는지, 차근차근 알아보도록 하겠습니다. 1. 사전 준비 작업 - cos.jar 라이브러리에 추가 파일 업로드를 위해서는 cos.jar이라는 파일을 라이브러리에 추가해야 합니다. 다운로드 링크는 여기에 있어요! Servlets.com 홈페이지에 접속 후, 스크롤을 내리시면 Download 메뉴가 있는데요. 이 압축 파일을 다운로드 받으시고, 압축을 해제해주세요. 그럼 lib 폴더 안에 cos.jar이라는 파일이 있을꺼에요. 이 파일을 jsp 프로젝트의 WEB-INF->lib 폴더에 넣어주시면 됩니다. 2..

안녕하세요! 오늘 포스팅 할 내용은 'ArrayList'입니다. 배열의 길이는 정해져 있기도 하지만, 때에 따라서 유연하게 늘였다 줄였다 할 필요가 있습니다. 데이터가 추가되고 빠질 때마다 적당하게 메모리가 할당이 되어야 하기 때문이죠. 실제 실무에서도 불필요한 메모리 할당으로 메모리 누수 현상을 방지하기 위해, 배열의 길이는 대부분 정하지 않고 사용한다고 합니다. Java는 이러한 상황에서 배열을 동적 할당하기 위해, ArrayList라는 클래스를 활용합니다. 그럼 ArrayList를 어떻게 활용하는지, 지금부터 살펴보겠습니다. * 왜 동적 할당이 필요할까...? 본격적인 설명에 앞서, 왜 배열의 동적 할당이 필요한지 예제를 통해 살펴보겠습니다. 1과 2를 더한 값인 3을 출력하는 sum(arg)라는 ..

안녕하세요!! 오늘의 포스팅 주제는 '인터페이스(Interface)'입니다. 지난 포스팅에서 Java는 다중 상속이 금지되어 있으며, 그 이유를 C++에서 다중 상속 시 발생 우려가 있는 Diamond of Death 현상으로 설명하였습니다. 인터페이스(Interface)는 이러한 Java의 한계점을 보완하기 위해 마련된 기능이라고 보시면 됩니다. 즉, 다른 클래스를 상속 받은 서브 클래스들의 공통점을 추출해서 사용이 가능하도록 돕습니다. 그럼 지금부터 인터페이스의 특징에 대해 알아보겠습니다. 1. 인터페이스(Interface)의 정의 - 무조건 정적(static) 멤버 변수(상수)와 추상 메소드로만 구성되는 클래스의 특별한 형태. C++에서도 '어떤 클래스로부터 상속을 받을지'에 대한 모호성으로 다중 ..

안녕하세요! 오늘 포스팅 할 내용은 'Diamond of Death 현상'입니다. 사실 본론부터 이야기하자면, Java에서는 일어날 수 없는 현상입니다. 왜냐하면 Java는 다중 상속을 허용하지 않기 때문입니다. 여기서 다중 상속이란, 여러 개의 서브 클래스가 하나의 동일한 슈퍼 클래스를 상속받는 것을 의미하는데요. 하나의 클래스의 활용도를 엄청 높일 수 있을 것만 같은데, Java는 왜 C++로부터 물려받지 않았을까요? 그 이유를 지금부터 풀어갑니다. * Diamond of Death (데스 다이아몬드 현상) * B와 C클래스는 A라는 부모 클래스를 상속 받은 자식 클래스이다. * 그런데 D라는 클래스는 B와 C클래스를 동시에 상속받았다. * 결국 D는 B와 C클래스를 상속 받기는 했지만, A클래스를 ..

안녕하세요! 오늘 포스팅 할 내용은 "클래스(Class)의 상속(Inheritance)"입니다. Java가 C++과 가장 다르다고 느낀 부분은, class가 가장 기본이 된다는 것이었어요. Java는 C계열의 언어와는 달리 다양한 class와 method가 정의되어 있습니다. 그만큼 C계열의 언어에 비해 코딩이 편하다(?)고 생각하는데요. 문제는 package와 project 등을 생성할 때마다 새로운 class를 만들다보면 , 동일한 이름과 기능을 갖게 되는 class들 때문에 많은 미스커뮤니케이션과 혼란이 발생할꺼에요. 이것이 바로 클래스의 상속이 적시적소에 이루어져야 하는 이유입니다. 그럼 Java의 기본이 되는 class의 상속(Inheritance)에 대해 알아볼까요? 1. 클래스의 상속이란? ..