본문 바로가기

자바기초

(45)
동적할당, 정적할당, 가비지컬렉터 동적 할당 컴퓨터 프로그래밍에서 실행 시간 동안 사용할 메모리 공간을 할당하는 것. 사용이 끝나면 운영체제가 쓸 수 있도록 반납하고 다음에 요구가 오면 재할당을 받을수 있다. 프로그램이 실행하는 순간, 프로그램이 사용할 메모리 크기를 고려하여 메모리의 할당이 이루어지는 정적 메모리 할당과 대조적. 장점 상황에 따라 원하는 크기만큼의 메모리가 할당되므로, 경제적이며, 이미 할당된 메모리라도 언제든지 크기 조절 가능 단점 더 이상 사용하지 않을 때 명시적으로 메모리를 해제해야 함. 정적 할당 메모리 할당 방법 중 하나. 메모리의 크기가 하드 코딩되어 있기에 프로그램이 실행 될 때, 이미 해당 메모리의 크기가 결정되는 것이 특징. 장점 메모리 누수와 같은 문제를 신경쓰지 않아도 됨. 정적 할당된 메모리는 실행..
메모리 영역 - 코드 영역, 데이터 영역, 힙 영역, 스택 영역 메모리 프로그램이 실행되기 위해서는 먼저 프로그램의 메모리가 로드되어야 함. 또한, 프로그램에서 사용되는 변수들을 저장할 메모리도 필요. 컴퓨터 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공하는데, 프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간은 같다.. 1. 코드(code) 영역 실행할 프로그램의 코드가 저장되는 영역으로, 텍스트 영역이라고도 함. CPU는 코드영역에 저장된 명령어를 하나씩 가져가서 처리. 실행 파일을 구성하는 명령어들이 올라가는 메모리 영역으로 함수, 제어문, 상수 등이 지정됨. 2. 데이터(Data) 영역 프로그램의 전역 변수와 정적(static) 변수가 저장되는 영역. 프로그램의 시작과 함께 할당되고, 프로그램이 종료와 함께 소멸. 3. 스택(stack) 영..
부동소수점과 그 한계 컴퓨터에서 소수는 밑(base)이 이진 소수로 표현된다. Ex. 0.125 = 1/10 + 2/100 + 5/1000 그렇기에 대부분의 십진 소수를 이진 소수로 정확하게 표현이 불가능.
절차 지향 언어와 객체 지향 언어 절차 지향 언어 절차적 프로그래밍 접근 방식을 따르는 언어. 대표적으로 C가 있다. 절차적 프로그래밍은 순차적으로 실행되어, 복잡도가 지나치지 않고 유지보수하기 쉬운 단순한 프로그래밍에서 유용하고 실행 속도도 빠르나, 실행 순서가 바뀔 경우 동일한 결과가 나오지 않을 수 있고 스케일이 커질 경우 유지 보수에 어려움이 있다. 객체 지향 언어 기능을 중심으로 메서드를 구현. 스케일이 큰 개발에 많이 사용. 1. 객체 지향의 3대 특성 - 캡슐화 : 관련된 데이터와 알고리즘이 하나의 묶음으로 정리된 것. - 상속 : 이미 작성된 클래스를 이어 받아 새로운 클래스를 생성하는 기법으로 기존 코드를 재활용하여 사용. - 다형성 : 하나의 이름(방법)으로 많은 상황에 대처하는 기법. 2. 장점 - 높은 코드 재활용성..
디자인 패턴 & 스트래티지 패턴 디자인 패턴 특정 문맥에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책. 객체 지향 프로그래밍 설계를 할 때 자주 발생하는 문제들을 피하기 위해 사용되는 패턴. 소스나 기계 코드로 바로 전환될수 있는 완성된 디자인은 아니며, 다른 상황에 맞게 사용될 수 있는 문제들을 해결하는데에 쓰이는 서술이나 템플릿. 프로그래머가 어플리케이션이나 시스템을 디자인할 때 공통된 문제들을 해결하는데에 쓰이는 형식화 된 가장 좋은 관행이나, 이를 맹신하여 굳이 필요가 없을 것 같은 부분까지 디자인 패턴을 쓰는 것은 좋지 않다. 전략 패턴 (Strategy Pattern) 실행 중에 알고리즘을 선택할 수 있게 하는 행위 소프트웨어 디자인 패턴 특정한 계열의 알고리즘들을 정의하고, 각 알고리즘을 캡슐화하며, 이 알고리즘..
자바 의존성 관련 - 프레임워크와 자바 웹개발 관련 프레임워크 프레임워크 프로그래밍에서 특정 운영 체제를 위한 응용 프로그램 표준 구조를 구현하는 클래스와 라이브러리 모임 소프트웨어 개발에 있어 하나의 뼈대 역할로, 재사용할 수 있는 수많은 코드를 프레임워크로 통합함으로써 개발자가 새로운 애플리케이션을 위한 표준 코드를 다시 작성하지 않아도 같이 사용된다. 프레임워크 기술 도입의 이유 : 개발의 통합성과 일관성 프레임워크와 라이브러리의 차이점 : 제어 흐름에 대한 주도성이 누구에게 있는가. (프레임워크: 사용자X / 라이브러리: 사용자) 자바 웹개발 관련 프레임워크 -스트럿츠 프레임워크 (STRUTS Framework) - JSP -스프링 프레임워크 (Spring Framework) - 경량형. Java EE에서 제공하는 대부분의 기능을 지원. -전자정부표준 프레임..
자바 의존성 관련 - 메이븐과 의존성 관리도구 Maven 자바용 프로젝트 관리 도구 Java 기반 프로젝트의 라이프사이클 관리를 위한 빌드 도구 컴파일과 빌드를 동시에 수행, 테스트를 병행하거나, 서버 측 Deploy 자원을 관리할 수 있는 환경을 제공. 또한 라이브러리 관리 기능도 내포. Java로 개발하다 보면 다양한 라이브러리를 필요로 하게 되는데, settings.xml 또는 pom.xml 파일에 필요한 라이브러리만 적으면 Maven이 알아서 다운받고 설치해주고 경로까지 지정해준다. 장점 1. 컴파일과 빌드 동시 수행 가능. 2. 서버의 Deploy 자원을 관리할 수 있는 환경을 제공. 3. 유지보수 측면에서 오픈소스 라이브러리, 프로젝트 등 관리가 용이 (pom.xml 파일을 통해 관리하기 때문) 4. IDE에 종속된 부분들 제거 가능. 5..
자바 의존성 관련 - 의존성과 라이브러리, 그리고 Jar 의존성 의존 관계임을 알아볼 수 있는 가장 쉬운 방법 : new 더보기 class Weapon{ Sword sword = new Sword(); } class Sword extends Weapon{ } 위의 코드에서 'Weapon은 Sword에 의존한다'고 표현한다. 한 클래스가 다른 클래스의 객체를 사용할 때 두 클래스 간의 관계를 의존이라고 한다. 라이브러리 소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임 (ex. 구성 데이터, 문서, 도움말 자료, 메시지 틀, 미리 작성된 코드, 서브루틴(함수), 클래스, 값, 자료형 사양 등) java에서는 미리 자주 사용되고 유용한 기능을 하는 class들을 만들어 놓고 제공한다. 이때 이 클래스들을 관련된 기능별로 분류하여 패키지 단위로..