Java의 기본다지기를 해보려고한다.
아무래도 기본이 조금 부족한 걸 여러모로 느껴서, 처음 시작하는 느낌으로 돌아가
Java에 대한 걸 처음 부터 시작해서 끝까지 모르는 것이 없을 정도로 하나하나 이해하면서 넘어 갈 생각이다.
오늘의 기본은 조금 고리타분하게 들릴 수도 있는 Java에 대해서이다.
JAVA?
자바언어는 객체 지향적 프로그래밍 언어이다.
객체지향(Object-Oriented Programming, OOP)은 명령어들이 합쳐져 만들어진 컴퓨터 프로그램을 하나의 독립된 단위로 보는 것을 말한다.
각 객체들(각 기능들)은 메시지를 주고받고 데이터를 처리하여, 프로그램을 유연하고 용이하게 변경할 수 있게 한다.
쉽게 말하자면 개발한 요소(클래스) 하나하나가 객체가 되고 그 요소끼리 상호작용을 통해 구현하는 것으로 생각하면 될 것이다.
또한 자바는 자바 가상 머신(JVM)이라는 것을 사용하여 어느 운영체제에서나 같은 형태로 실행 될 수 있는 특징을 가졌다.
JVM은 자바 바이트코드를 실행 할 수 있는 주체인데, 자바 바이트 코드는 또 어디서 나왔나 생각할 수도 있다.
우리가 자바 코드를 작성하고 컴파일 버튼을 누르게 되면 컴파일러는 이를 자바 바이트코드로 만든다.
JVM은 일반적으로는 지바 인터프리터 방식이나 JIT 컴파일러 방식으로 컴퓨터에서 실행할 수 있도록 한다.
**(다른 방식으로는 jop 자바 프로세서를 통해 실행하는 방식도 있다고한다.)
이렇게 JVM을 통해 프로그램을 실행 하게되면 운영체제에 묶이지 않고 같은 형태로 실행 될 수 있는 특징을 가지게 되는 것이다.
그외 다른 중요한 특징들로는 잘알려진 상속, 다형성, 캡슐화가 존재한다.
상속은 부모 클래스와 자식 클래스로 나뉘는데 자식이 부모의 모든 자원을 물려 받는 것이다.
다형성은 상속을 통해 부모 클래스 타입의 참조 변수로 자손 클래스의 인스턴스를 참조할 수 있도록 해준다.
캡슐화는 전에 정리한 접근제어자를 이용해서 접근을 제어하며 보안에 신경을 쓸 수 있다.
다형성과 상속은 객체지향의 특징 중에서도 매우 중요하기에 다음에 더 자세히 다룰 것이다.
그러면 위의 특징들 말고도 정리를 해보겠다.
1. 자동 메모리 관리 (GC)
자바는 자동 메모리 관리를 지원한다.
이전에 static을 정리하면서 한번 다룬적이 있는데 GC(Garbage Collector)이라는 기능이다.
백그라운드에서 사용되지 않는 객체를 정리하고 메모리를 확보해주는 편리한 기능이다.
메모리의 영역은 Heap 영역과 Stack 영역 그리고 Static 영역으로 나눠진다.
1) Heap - 객체, 배열 등 참조형의 데이터들이 저장된다.
2) Stack - Heap 영역에 생성된 데이터 참조값들과, 원시타입의 데이터들(int, float 등)이 저장된다.
3) Static - 일반적인 Class나 static을 붙히는 것들이 저장된다.
가비지컬렉션은 Heap영역의 객체들 중 Stack에 닿지 않는 객체들을 정리하는 느낌이라고 생각하면 될 것 같다.
2. 제네릭 도입
제네릭이란 무엇일까?
이는 자바 프로그래밍을 하다보면 몇번 만나는 녀석인데, 보통 <String>과 같이 <> 안에 들어가 있다.
제네릭은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 방법이다.
말로만 들어서는 잘 모를수도 있어서 코드 한 줄을 가지고 왔다.
ArrayList<String> arr = new ArrayList<String>();
많이 볼 수 있는 arraylist 이다. 제네릭을 통해 String 값만을 넣을 수 있게 지정했다.
이는 코드의 가독성을 높이며, 타입 지정을 통해서 클래스 사용에 편리함을 더할 수 있다.
제네릭에 대한 더 자세한 내용은 나중에 정리할 수 있다면 해봐야겠다.
3. 많은 사람들의 사용으로의 수많은 참고자료
이에 대해서는 달리 할말이 없다.
나도 많은 인터넷 자료들을 통해 공부하면서 글을 작성하는 것이기도 하기에 맞는 이야기이기도 하다.
하지만 이런 자바에도 단점이 있다.
1. JVM
방금까지 JVM을 설명하면서 좋다고 했으면서 왜 단점이냐 하면 그 이유는 실행 속도에 있다.
다른 언어에 비해 실행 속도가 느린 자바는 실제로 코딩테스트에 있어서 잘 선택되지 않기도 한다.
2. 코드 길이
이 부분도 다른 언어에 비해 코드길이가 길기에 추가 되어있다.
예외처리를 할 때도 역시 개발자가 일일이 처리를 지정해줘야 한다는 불편함이 있다는 것도 단점이라고 한다.
이렇게 자바의 내용에 대해서 정리 하게 되었다.
비록 단점도 있지만, 그리 치명적이게 보이진 않아서 더 마음이 가는 것 같다.
다음 글은 자바 프로그램의 기본 구조로 해야겠다.
참고 -
'언어 > Java' 카테고리의 다른 글
[Java] - Lambda 표현식과 Stream (0) | 2022.03.20 |
---|---|
[Java] 자바 프로그램의 구조 (0) | 2022.03.20 |
[Java] Overriding, Overloading (0) | 2022.03.20 |
[Java] 접근제어자(제한자) (0) | 2022.03.20 |
[Java] Optional (0) | 2022.03.20 |