본문 바로가기

Computer Science

(19)
애자일(Agile) 소프트웨어 개발 방법론 애자일(Agile) 소프트웨어 개발 방법론 애자일(Agile) 방법론 애자일(Agile) 방법론은 구체적인 개발 프로세스가 아닌 개발 지침, 철학에 가깝다. 변화를 수용하고 협업과 제품의 빠른 인도를 강조하는 반복적 개발 방법 문서화보다 코드, 프로그램, 소프트웨어 자체를 중요시 함 요구사항의 변화는 불가피하며 이에 대응하는 것이 현실적이다. 기존의 개발 프로세스는 설계 기간이 길며 재작업 시 오버헤드가 크다. 환경의 빠른 변화에 대응하는 것이 중요하다. 애자일 선언문 (Agile Manifesto) 공정과 도구보다 개인과 상호작용을 포괄적인 문서보다 작동하는 소프트웨어를 계약 협상보다 고객과의 협력을 계획을 따르기보단 변화에 대응하기를 요구사항이 바뀌기 쉬운 중소형의 비즈니스 시스템이나 전자 상거래 응..
소프트웨어 개발 방법론 소프트웨어 개발 방법론 많이 사용되고 있는 4가지 패러다임 폭포수 모델 원형 패러다임 나선형 모델 4세대 기법 패러다임의 선정은 프로젝트의 성격, 소요되는 기간, 방법과 도구 등에 의해 이루어진다. 폭포수 모델 특징 고전적 라이프 사이클 패러다임 가장 오래되고 널리 사용되는 패러다임 순차적인 접근방법 하향식 접근방법 장점 프로젝트 진행 과정을 세분화하여 관리 용이 단점 대규모일수록 부분 순환이 발생하기 때문에 순차적인 흐름을 따라가는 데 어려움이 있다. 요구사항을 초기에 구체적으로 기술하기 어렵다. 결과가 후반부에 가서야 얻어짐으로써, 중요한 문제점이 뒤에 발견된다. 원형 (Prototyping) 패러다임 적용 환경 목표를 정하였으나, 속성을 어떻게 만족시킬지 모르는 경우 사용자의 요구사항이 무엇인지, ..
추상 클래스와 인터페이스 추상 클래스 클래스는 일반 클래스(concrete class)와 추상 클래스로 나뉘는데 추상 클래스는 클래스 구현부 내부에 추상 메서드가 하나 이상 포함되거나 abstract로 정의된 경우를 말합니다. 클래스를 설계도라고 한다면 추상 클래스는 미완성 설계도라고 할 수 있습니다. 미완성 설계도란 말 그대로 덜 만들어진 설계도입니다. 클래스가 미완성이라는 것은 단지 미완성 메서드(추상 메서드)를 포함하고 있다는 의미입니다. 미완성 설계도만으로 온전한 상품을 만들 수 없듯이 추상 클래스만으로 객체를 생성할 수 없습니다. 추상 클래스는 상속을 통해 자식 클래스에 의해서만 완성될 수 있습니다. (추상 클래스는 추상 메서드를 선언하여 상속을 통해 자식 클래스에서 완성하도록 유도하는 클래스입니다.) 추상 클래스 자체..
Cookie와 Session Cookie와 Session Cookie와 Session을 사용하는 이유 HTTP 프로토콜의 특징이자 약점인 비연결지향(Connectionless)와 상태정보유지안함(Stateless) 보완하기 위해서 사용합니다. 비연결지향(Connectionless) : 클라이언트가 Request를 서버에 보내면 서버는 클라이언트에게 요청에 맞는 Response를 보내고 접속을 끊습니다. 상태정보유지안함(Stateless) : 연결을 끊는 순간, 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지하지 않는 특성 Cookie 정보를 유지할 수 없는 Connectionless, Stateless의 성격을 가진 HTTP 프로토콜의 단점을 해결하기 위해 도입됨 웹 서버가 브라우저에게 지시하여 사용자의 로컬 컴퓨터의 파일 또는..
Java 메모리 - (3) Garbage Collector Garbage Collector(GC) 메모리 관리 방법 중 하나로 시스템에서 더이상 사용하지 않는 동적 할당된 메모리 블럭을 찾아 자동으로 다시 사용 가능한 자원으로 회수하는 것으로 시스템에서 가비지 컬렉션을 수행하는 부분을 가비지 컬렉터라 부릅니다. C언어의 경우, 프로그래머가 메모리를 할당한 뒤 수동으로 해제까지 직접 해줘야 합니다. 그래서 메모리를 할당해놓고 필요없어진 뒤에도 해제를 안하는 일 등이 생겨서 메모리 누수가 생기거나 거꾸로 해제했던 메모리를 다시 사용하는 실수가 생기곤 합니다. 이러한 문제들을 해결하기 위해 생겨난 것이 가비지 컬렉션이며, 가비지 컬렉션 기능을 채택한 언어의 경우에는 가비지 컬렉터가 자동으로 프로그램이 실행되며 생기는 쓸모 없는 메모리들을 알아서 수집하고 관리해줍니다...
Java 메모리 - (2) JVM JVM(Java Virtual Machine) JVM을 이해하기 위해서는 JVM, JRE, JDK, Java를 구분해서 알아야 할 필요가 있습니다. JVM (Java Virtual Machine) Java Byte Code를 OS에 맞게 해석해주는 역할을 합니다. Java Compiler는 .java 파일을 .class 라는 Java Byte Code로 변환시켜 줍니다. Byte Code는 기계어가 아니기 때문에 OS에서 바로 실행되지 않습니다. 이때, JVM은 OS가 Byte Code를 이해할 수 있도록 해석해줍니다. 이러한 JVM의 해석을 거치기 때문에 C언어 같은 네이티브 언어에 비해 속도가 느렸지만, JIT(Just In Time) 컴파일러를 구현해 이점을 극복했습니다. 따라서, Byte Code..
Java 메모리 - (1) Java 메모리 구조 Java 메모리 구조 Java 애플리케이션을 개발할 때, 메모리를 잘 아는 것은 중요합니다. 메모리에 어떻게 코드가 적재되는지 이해해야 코드를 최적화할 수 있고 코드 에러를 피할 수 있습니다. 메모리 관리가 잘 되지 않는 프로그램은 서비스 속도 저하에서부터 심하게는 서버 불능 상태에 이르기도 합니다. 한정된 자원에서 효율적으로 메모리를 사용하여 성능 향상도 가능합니다. Method Area(Static Area) JVM이 구동될 때 생성되며 모든 스레드가 공유하는 영역 JVM 구동 중 사용될 클래스 파일을 읽고 클래스 별로 runtime constant pool(런타임 상수 풀), field data(필드 데이터), method data(메서드 데이터), constructor(생성자) 등을 저장 필드 정..
객체지향 프로그래밍(OOP) 객체지향 VS 절차지향 절차지향(Procedural Programming)이란? 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시 되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법입니다. 대표적인 절차지향 언어에는 C언어가 있습니다. 절차지향 프로그래밍은 컴퓨터의 작업 처리 방식과 유사하기 때문에 객체지향 언어를 사용하는 것에 비해 더 빨리 처리되어 시간적으로 유리합니다. 장점 컴퓨터의 처리구조와 유사해 실행 속도가 빠릅니다. 단점 유지보수가 어려움 실행 순서가 정해져 있으므로 코드의 순서가 바뀌면 동일한 결과를 보장하기 어려움 디버깅이 어려움 객체지향(Object Oriented Programming)이란? 실제 세계를 모델링하여 소프트웨어를 개발하는 방법입니다. 객체지향 프로그..
JAVA Java란? 객체지향 프로그래밍 언어이다. 서버, 모바일, 임베디드, 애플리케이션 등 다양한 분야에서 쓰인다. 처음 나온 것은 1995년이다. Java의 특징 쉬운 언어이다. C와 C++언어의 문법을 기본으로 차용하여 개발된 언어 C와 C++이 가진 어려운 문법인 포인터와 다중 상속 제거 C와 C++에 비해 쉬운 언어이다. 이식성이 높은 언어이다. Java는 JVM(Java Virtual Machine) 위에서 돌아가기 때문에 운영체제 종류에 상관없이 돌아간다. Java 언어로 개발된 프로그램은 소스 파일을 다시 수정하지 않아도 자바 실행 환경(JRE : Java Runtime Environment)이 설치되어 있는 모든 운영체제에서 실행 가능하다. 따라서 Java 언어는 이식성이 높은 프로그래밍 언어라..