JAVA 16

[JAVA] JAVA의 역사와 특징

자바란? 자바는 가전 제품에 들어갈 소프트웨어를 만들기 위해 탄생되었다. 썬 마이크로시스템즈의 제임스 고슬링이 개발한 객체 지향적 프로그래밍 언어이며 현재 웹 애플리케이션 분야에 가장 많이 사용하는 언어이다. 안드로이드를 비롯한 모바일 기기용 소프트웨어 개발에도 널리 사용된다. 자바의 유래 자바는 1991년 1월 제임스 고슬링이 만들었다. 자바는 처음 고안되었을 때 자바가 아닌 오크라는 이름으로 시작되었다. 제임스 고슬링의 목표는 가전 제품에 타재될 소프트웨어를 만드는 것을 목표로 하였다. 하지만 C언어의 문제점, 가전 제품의 긴 수명으로 인한 완벽한 호환을 가진 소프트웨어의 개발 요구, 가전 제품에 사용될 소프트웨어의 높은 신뢰성 필요 등의 문제에 대한 해결 방안을 모색 해야만 했다. 처음에는 C와 C..

JAVA 2022.09.20

[JAVA] JAVA는 Call-By-Value? Call-By-Reference?

자바는 Call-By-Value일까, Call-By-Reference일까? 결론부터 말하자면 자바는 Call-By-Value이다. 우리가 흔히 객체를 생성하고 객체를 수정하면 객체 원본의 값도 같이 수정되기 때문에 Call-By-Reference라고 생각하기 쉽다. 예를 위해 클래스를 하나 생성해보겠다. public class CallByTest { private int value; public void setValue(int value) { this.value = value; } public int getValue() { return value; } public static void run(CallByTest a) { a.value = 100; } public static void main(String..

JAVA 2022.02.28

[JAVA] JAVA 컴파일 과정과 JVM

자바의 가장 큰 장점 중에 하나가 하드웨어, 운영체제에 상관없이 컴파일된 코드가 독립적이라는 것이다. 일반적인 프로그램은 Program, OS, H/W가 있지만, 자바는 Program, OS, H/W, JVM이 존재한다. 바로 이 JVM이 CPU, OS에 관여하지 않고 독립적인 실행이 가능하도록 만들어주는 것이다. 자바 컴파일 과정 컴파일 타임 환경 개발자가 소스 코드를 작성한다. (.java 작성) 자바 컴파일러가 자바 소스 코드를 컴파일한다. 이 때 컴파일된 코드는 아직 컴퓨터가 읽을 수 없고 자바 가상 머신이 이해할 수 있는 바이트 코드(.class) 파일이다. 자바 바이트 코드를 JVM의 클래스 로더에게 전달한다. JVM은 크게 클래스 로더, 런타임 데이터 영역, 실행 엔진으로 구분할 수 있다. ..

JAVA 2022.02.27

[JAVA] JAVA는 인터프리터? 컴파일?

JAVA는 인터프리터 언어일까, 컴파일 언어일까? 결론부터 말하자면 JAVA는 인터프리터이면서 컴파일 언어이다. 우선 인터프리터와 컴파일의 차이부터 알아야 한다. 인터프리터 언어 인터프리터는 코드를 한 줄씩 읽어 내려가며 실행하는 프로그램이다. 인터프리터는 자체적으로 실행 기능이 없기 때문에 목적 프로그램(.exe)을 만드는 곳만 컴파일 언어를 사용하고 대부분의 코드는 인터프리터 언어로 작성한다. 실행 시마다 소스 코드를 한 줄씩 읽는 방식이기 때문에 컴파일 언어보다 속도가 느리다. 하지만 인터프리터 언어는 수정이 간단하다는 장점을 가지고 있다. 컴파일 언어는 소스 코드를 번역하여 실행 파일을 만들기 때문에 수정 시 소스 코드를 다시 컴파일해야 한다. 그에 비해 인터프리터 언어는 소스 코드를 수정하여 실..

JAVA 2022.02.27

[JAVA] 자바는 무엇인가?(자바의 특징)

자바는 대표적인 객체지향 프로그래밍 언어 중 하나이다. 자바의 창시자는 캐나다의 소프트웨어 개발자인 제임스 아서 고슬링이며 자바의 아버지라고도 불린다. 자바의 특징 객체지향언어(OOP) 자동 메모리 관리 운영체제에 독립적 멀티쓰레드 지원 동적 로딩 지원 객체지향언어(OOP) 객체지향프로그래밍은 프로그램을 개발하는 기법으로 객체를 만들고 이들을 하나씩 조립, 연결하여 전체 프로그램을 완성하는 것이다. 객체지향 언어의 특징은 추상화, 캡슐화(정보은닉), 상속, 다형성 등이 있다. 자동 메모리 관리 C, C++ 같은 경우 메모리를 할당하였다면 개발자가 메모리를 직접 제거해주어야 한다. 하지만 JAVA는 JVM이 지속적으로 메모리를 감시하며 더이상 사용하지 않는 메모리를 해제시킨다. Garbage Collect..

JAVA 2022.02.27

[JAVA] for문, 향상된 for문, for Each문

우리가 기본적으로 많이 사용하는 반복문은 for문이다. 그리고 for문과 동일한 출력을 가지는 for Each문이 존재한다. for Each문은 향상된 for문이라고도 불린다. 배열에서는 array.length; 를 사용하지만 리스트나 맵의 경우 list.size(), map.size()를 통하여 메소드를 호출한다. public class ForEach { public static void main(String[] args) { List list = new ArrayList(); for(int i = 0; i < list.size(); i++) { } } } 이 때 list의 개수가 100만개라면? list.size() 메소드를 100만 번 호출하게 되는 것이다. public class ForEach {..

JAVA 2022.01.13

[JAVA] Map - HashMap, TreeMap, LinkedHashMap

Map 컬렉션 클래스 Map은 List, Set의 인터페이스인 Collection 인터페이스와 다른 저장 방식을 가진다. Map은 Key - Value의 pair 형식의 데이터 저장 방식을 가진다. Map 인터페이스로 구현한 모든 Map 컬렉션 클래스는 데이터의 저장 순서를 유지하지 않는다. Key와 Value는 매칭이 되어 있는데 키는 중복을 허용하지 않지만 값은 중복을 허용한다. 즉, Key는 고유의 key를 가져야 하고, Value는 여러 군데에서 쓰일 수 있다는 얘기다. 예로 들어 C - 언어, 자바 - 언어 위와 같이 Value는 중복이 허용이 되지만 과일 - 사과, 과일 - 포도 위와 같이 Key는 중복이 허용이 불가능하다. Map에서 많이 쓰이는 함수는 put(), get(), remove(..

JAVA 2022.01.12

[JAVA] Collection framework

컬렉션 프레임워크(Collection framework) 여러 데이터를 효과적으로 처리할 수 있게 표준화된 방법을 제공하는 클래스의 집합 데이터를 저장하는 자료 구조 및 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현한 것 자바의 인터페이스를 사용하여 구현이 된다. 컬렉션 프레임워크의 주요 인터페이스로는 List, Set, Map 등이 있다. List와 Set은 Collection 인터페이스에서 정의를 하지만 Map 인터페이스는 구조상의 차이로 인해 Collection 인터페이스와 다른 저장 방식을 가진다. (Key, Value) Map에 대해서는 나중에 따로 다루도록 하겠다. 주요 인터페이스의 특징 List 순서가 있는 데이터의 집합 데이터의 중복을 허용 구현 클래스 Vector, ArrayLis..

JAVA 2022.01.12

[JAVA] Static Stack Heap 메모리 구조

메모리는 프로그램을 구동시키기 위해서 꼭 필요한 것이고, CPU가 처리할 데이터가 임시로 저장되어 있는 공간이다. 메모리의 공간이 한정되어 있기 때문에 어떻게 관리하느냐에 따라 성능이 달라진다. 메모리의 공간은 크게 static, stack, heap으로 나뉘어져 있다. 하나씩 알아보도록 하자. Static static 메모리 영역은 필드 부분에 선언된 변수(전역변수)와 static이 붙은 변수와 메소드인 정적 멤버를 static 영역에 저장한다. static 영역에 저장된 데이터는 프로그램의 시작부터 종료까지 데이터가 남아있다. 정적 메모리를 잘 사용할 경우 메모리의 이점, 공유와 같은 장점이 있지만, 무분별하게 사용할 경우 메모리 부족 문제가 발생할 수 있으며 공유가 되는 자원이기 때문에 멀티쓰레드 ..

JAVA 2022.01.06

[JAVA] Call by value와 Call by reference

나는 첫 언어를 c언어로 시작을 했다. 그래서 c언어로 call by value, call by reference를 공부했었는데 문득 자바에서는 어떻게 될 지 궁금해졌다. Call by value(값에 의한 호출) public class CallByTest { public static void swap(int a, int b) { int temp = a; a = b; b = temp; } public static void main(String[] args) { int a = 10, b = 20; System.out.println(a + " " + b); swap(a, b); System.out.println(a + " " + b); } } ------------------ 출력 결과 -----------..

JAVA 2022.01.06