Java 154

[자바의 의존성] 메이븐과 의존성 관리도구

메이븐(Maven)과 의존성 관리도구 메이븐은 의존성 관리도구이다. Apache Maven의 사전적 정의는 다음과 같습니다. Apache Maven은 자바용 프로젝트 관리도구로 Apache Ant의 대안으로 만들어졌다. Apache License로 배포되는 오픈 소스 소프트웨어이다. Java 기반 프로젝트의 라이프사이클 관리(논리적인 작업 흐름)를 자동화 빌드 도구이다. 즉, 자바 소스를 컴파일하고 패키지해서 배치하는 일을 자동화 해주는 것 Maven의 장점 라이브러리의 관리를 매우 용이하게 해준다. 컴파일과 빌드를 동시에 수행, 테스트를 병행하거나 서버 측 *Deploy 자원을 관리할 수 있는 환경을 제공한다. 프로젝트의 작성부터 컴파일, 페트스 등 프로젝트 라이프사이클에 포함되는 각 테스트를 지원해준..

Java 2020.05.13

메모리 4영역.

프로그램 실행 순서 프로그램 실행 순서 메모리의 구조 사용자가 프로그램을 실행하면 운영체제(OS)는 먼저 프로그램을 메모리(RAM)에 로드(load) 한다. 이때 프로그램에서 사용되는 변수들을 저장할 메모리도 필요하다. OS는 코드(code) / 데이터(data) / 스택(stack) / 힙(heap) 4영역에 프로그램에서 사용되는 변수들을 저장 할 메모리를 할당 한다. 코드(Code) 영역 메모리의 코드 영역은 우리가 작성한 소스코드가 들어가는 부분. 즉, 실행할 프로그램의 코드가 저장되는 영역으로 텍스트(code) 영역이라고도 부른다. 실행 파일을 구성하는 명령어들이 올라가는 메모리 영역으로 함수, 제어문, 상수 등이 여기에 저장된다. CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리한다. ..

Java 2020.05.13

부동소수점과 그 한계.

숫자 123을 표현하는 방식에는 아래와 같이 여러가지가 있다. 16진수 : 7B 10진수 : 123 8진수 : 173 2진수 : 1111011 이 중 우리가 일상적으로 사용하는 숫자 표현 방식은 10진수 이다. 그러나 컴퓨터는 기본적으로 2진수를 사용한다. 13 => 1101과 같이 이진수로 표현하기 쉬운 수도 있지만, 0.3 => 0.0100110011......(0011의 무한 반복) 과 같이 이진수로 표현하지 못하는 소수가 발생한다. 이와 같은 경우 어쩔 수 없이 컴퓨터에는 가장 근사치의 값이 저장된다. 이 근사 값을 저장하는 방법에는 고정 소수점과 부동소수점 두가지가 있다. 고정 소수점 정수를 표현하는 비트 수와 소수를 표현하는 비트 수를 미리 정해 놓고 해당 비트 만큼만 사용해서 숫자를 표현하는..

Java 2020.05.13

기계어와 어셈블리언어 고급언어.

프로그램은 인간이 이해 할 수 있는 고급언어와 기계가 이해 할 수 있는 기계어의 번역(컴파일)을 통해 만들어 진다. @고급언어 일반적으로 언급되는 프로그래밍 언어 Java C언어, Python등 추상화 되어 있는언어 고급언어를 컴파일러가 어셈블리어로 번역 ▼ ▽ 컴파일러 ▼ @어셈블리어(assembly language) 컴파일러로 부터 생성된 기계가 이해할 수 있는 형태로 번역된 언어 기계어와 일대일 대응이 되는 낮은 사고방식의 언어 CPU의 종류에 따라 서로 다른 코드를 가짐 어셈블러는 어셈블리어를 기계어로 번역 ▼ ▽ 어셈블러 ▼ @기계어 0과 1로 이루어진, 컴퓨터가 직접 해독하고 실행 할 수 있는 언어 프로그램을 나타내는 가장 낮은 단계의 언어 CPU의 종류에 따라 서로 다른 코드를 가짐(=CPU..

Java 2020.05.13

절차지향 언어와 객체 지향 언어의 차이는?

절차지향(procedural Programming) 절차지향 프로그래밍은 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시 되고 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법을 말합니다. 대표적인 절차지향 언어에는 C언어가 있는데, 이는 컴퓨터의 작업 처리 방식과 유사하기 때문에 객체지향 언어를 사용하는 것에 비해 더 빨리 처리되어 시간적으로 유리하다고 볼수 있습니다. 옛날에는 하드웨어와 소프트웨어의 개발 속도차이가 크지 않았다면 지금은 하드웨어의 개발속도가 소프트웨어의 속도를 따라오지 못하는 상황이 발생합니다. 이는 객제치향 언어가 나타나면서 이러한 현상이 존재하게되었습니다. 장점 - 컴퓨터의 처리구조와 유사해 실행속도가 빠르다 - 메모리를 직접 조작할수있다. 단점 - 유지보수가 ..

Java 2020.05.13

디자인패턴(ㅇ), 스트래티지 패턴( x )

1. 디자인패턴 (디자인 패턴은 소프트웨어 공학론 안의 좋은 코드를 설계하기 위한 일종의 설계 디자인 방법론) 디자인 패턴은 객체지향 언어에서 클래스와 클래스의 메서드를 사용하는 패턴, 즉 특정 의도를 가지는 방법을 의미한다. 코딩을 혼자 하는 경우는 드물며 보통 다른 개발자와 함께 개발을 하기 때문에 내가 작성한 코드가 다른 사람이 알아볼 수 없으면 제법 곤란하지 않을 수가 없다. 그러므로 작성 코드는 최대한 간결하고 모두가 알아 볼 수 있는 내용으로 작성해야 한다. 1). 코딩이 명확하고 단순하며, 2). 모듈( class나 function 등 )은 한 가지 기능만 하도록 작게 세분화 시킬 수 있으며 3). 재사용성이 높고 4). 유지 보수가 쉬우며 5). 리소스의 낭비가 없는지 숙지하여 < 디자인패..

Java 2020.05.13

CGI와 서블릿 그리고 톰캣

1. CGI란 무엇인가 CGI란 공통 게이트웨이 인터페이스(common gateway interface)의 약어로, 웹서버와 외부 프로그램 사이에서 정보를 주고받는 방법이나 규약들을 말한다. 그렇다면 여기에서는 CGI에 대하여 조금 쉽게 설명한 후에 그 개념에 대하여 더 자세하게 알아보도록 하겠다. CGI란 사용자의 요청의 의한 서버의 응답이라고 할 수 있다. 예를 들어 방명록이나 게시판등이 대표적이라고 할 수 있는 것이다. CGI를 가능하게 하기 위해서는 사용자의 입력을 받아들이는 html문서와 입력을 처리하기 위한 CGI프로그램이 필요하다. CGI는 응용프로그램이기 때문에 html로는 만들 수 없고 웹서버의 환경의 따라 다르게 구현되는데 주로 C, Perl, Visual Basic 등이 사용되고 있다..

Java 2020.05.13

JVM과 바이트 코드

JVM : Java Virtual Machine (자바 가상 머신) - 자바 소스코드로부터 만들어지는 자바 바이너리 파일(.class)을 실행할 수 있다. - Java Byte Code를 OS(Operating System : 운영체제)에 맞게 해석, 실행될 수 있는 런타임 환경을 제공해주는 규격. - JVM은 많은 하드웨어와 소프트웨어 플랫폼에 이용 가능하다. - 운영체제 독립적으로 동작하기 위해 필요 - 컴파일된 바이트 코드를 실행하기 위한 가상의 머신 * Loads code : 작성된 소스코드를 로드(Load : 읽기) * Verifies code : 소스코드 검증 및 확인 ( 문법에 올바른지 검증하여 정상적으로 동작하는지 확인한다.) * Executes code : 소스코드 실행(실제 머신에서 소..

Java 2020.05.13

J2EE, JDK, JRE, J2SE 차이

1. JRE : JVM이 실행될 수 있도록 도와주는 역할을 하는 파일로 주로 "사용자"가 사용한다. 그리고 JDK와 별도로 설치가 가능하다. 2. JDK : "개발자"를 위한 파일로 자바 소스코드를 직접 입력할 수 있다. JDK를 설치하면 JRE와 JVM가 함께 설치되어 직접 입력한 자바 소스 코드를 실행시킬 수 있다. 3. J2SE(Java 2 Standard Edition) [ 기본적인 Java의 개발/실행 환경으로 Java언어를 이용하여 어플리케이션(Application), 애플릿(Applet) 그리고 컴포넌E트(Component) 등을 개발하고 실행할 수 있는 환경을 제공하는 플랫폼이다. ] 어떠한 Java프로그램을 개발하더라도 J2SE설치는 필수이며 SDK, RE, Plugin 기술등으로 구성된..

Java 2020.05.13

If문 return.

void doCommandDetail(int id) { System.out.println("== 게시물 상세 =="); Article article = getArticleById(id); if ( article == null) { System.out.println("해당 게시물은 존재하지 않습니다."); return; } System.out.printf("번호 : %d\n", article.id); System.out.printf("날짜 : %s\n", article.date); System.out.printf("제목 : %s\n", article.title); System.out.printf("내용 : %s\n", article.body); } if 문 마지막에 return; 을 입력해주고 바로 밑에 ..

Java 2020.05.08

다형성(Polymorphism)

자바에서는 한 타입의 참조 변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현하였다. 그래서 부모 클래스 타입의 참조 변수로 자식 클래스의 인스턴스를 참조할 수 있다. 그러나 같은 타입의 인스턴스라도 참조 변수의 타입에 따라 사용할 수 있는 멤버의 개수가 달라진다는 점에 주의해야 한다. 부모 클래스 타입의 참조 변수로 자식 클래스의 인스턴스를 참조하게 되면 부모 클래스에 정의된 멤버들(상속받은 멤버 포함)만 사용할 수 있게 되고 반대의 경우(자식 클래스 타입의 참조 변수로 부모 클래스의 인스턴스를 참조하는 것)는 불가능하다. 자식 클래스의 멤버는 부모 클래스를 확장한 것이기 때문에 부모 클래스보다 같거나 더 많기 때문이다. 부모 클래스에 없는 멤버를 사용할 가능성이 있어서 ..

Java 2020.05.05

JVM, GC

* JVM : Java Virtual Machine ( 자바 가상 머신 ) * GC : Garbage Collector ( 가비지 컬렉터 ) JVM은 작성한 자바 프로그램이 수행되는 프로세스를 의미한다. 다시 말해 java라는 명령어를 통해서 애플리케이션이 수행되면, 이 JVM 위에서 애플리케이션이 동작한다. 이 JVM에서 여러분들이 작성한 프로그램을 찾고 실행하는 일련의 작업이 진행된다. 자바의 기본 메모리 관리는 개발자가 하지 않아도 된다. 메모리 관리를 JVM이 알아서 하기 때문이다. 이때 JVM 내에서 메모리 관리를 해주는 것을 바로 "가비지 컬렉터"라고 부른다. Garbage는 우리나라말로 "쓰레기"라는 의미이며, 사용하고 남아 있는 전혀 필요 없는 객체들이 여기에 속한다. 아무리 가비지 컬렉터..

Java 2020.05.03

재귀 알고리즘 기초.

재귀(Recursion) 함수란 특정 함수 내에서 자기 자신을 다시 호출하여 문제를 해결해나가는 함수이다. 문제를 해결하기 위해 원래 범위의 문제에서 더 작은 범위의 하위 문제를 먼저 해결함으로써 원래 문제를 해결해나가는 방식이다. 일반 반복문을 통해 구현 가능한 기능은 재귀 함수를 통해 구현이 가능하며 반대로 재귀 함수로 구현 한 기능을 반복문으로 구현이 가능하다. 재귀 함수는 함수 내에서 자기 자신을 계속 호출하는 방식이기 때문에 함수 안에 반드시 종료 구간이 되는 Base Case를 생각하며 코드를 구현해야 한다.

Java 2020.05.03

메모리 구조

자바 프로그램이 실행될 때, *JVM은 *OS로부터 필요한 메모리를 할당 받음. 메모리가 낮은 순으로 클래스, 클래스 변수 -> 객체 인스턴스 -> 메서드, 지역변수, 매개변수 순 클래스, 클래스 변수(메소드 영역) / 객체 인스턴스(힙 영역) / 메서드, 지역변수, 매개변수(스택 영역) 메서드 영역 - 클래스 사용 시, 해당 클래스의 클래스 파일(. class)을 읽고, 그 정보를 메서드 영역에 저장. 힙 영역 - 자바에서 사용되는 모든 인스턴스가 저장되는 영역. new 키워드를 사용해서 만든 객체 생성 시, 힙 영역에 저장한다. 스택 영역 - 메서드가 호출될 때 메소드의 스택 프레임이 저장되는 영역. - JVM은 메소드가 호출되면, 메소드 호출과 관계되는 지역 변수 및 매개변수를 스택 영역에 저장. ..

Java 2020.05.03

함수(메소드, 기능)

메인 메소드(main Method). 우리가 흔히들 말하는 메인 함수. 메소드란? 객체에 대한 동작을 의미. 메인 메소드란? 자바 프로그램을 실행할 때의 시작 지점을 의미. * 작성법 : public static void main(String[] args) { } * 구성 : public, static, void, (String[] args) 1. Why main mehtod is public in Java? 메인 메소드는 왜 public인가? - public은 자바 접근제한자 중에 하나이다. (아래로 갈수록 점점 제한이 많아지게 되는 순서) public : 모든 클래스에서 접근이 허용 protected : 같은 패키지(폴더)에 있는 클래스와 상속관계의 클래스들만 허용 default : 같은 패키지 내에..

Java 2020.04.28
728x90
반응형
LIST