공부/Java 8

일단 마시고 본다. (상속)

자바를 개발하다 보면 상속이라는 개념을 배우게 됩니다. 그리곤 extends Object 가 있다는 것만 기억하게 되고 상속을 잊어버립니다. (전부가 그렇다는 것은 아니지만 제 친구는 잊어버렸습니다. 실제로 추상클래스 상속하라고 했더니 클래스 상속 어떻게 하는 건데? 인터페이스여야지만 상속되는 거 아니었음? 라고 했던 비하인드가 있습니다.(그친구는 개발에 흥미만 있는 친구입니다.)) 상속은 자바에 있어 굉장히 중요한 개념입니다. 부모가 가진 것을 자식에게 물려줄 수 있다는 점, 그리고 protected로 부모와 자식외에는 접근조차 불가한 접근 제어자까지 있습니다. 또, 부모에서 받은 것들을 재정의할 수 있다는 점에서 더 중요함을 알려줍니다. 예시를 들자면, Machine과 Robot으로 간단하게 들 수 ..

공부/Java 2022.04.25

[공부/자바] JVM 메모리 관리

Java 메모리 영역 중 Stack, Heap, 그리고 static 이렇게 3가지 영역에 대해 공부하고 기억, 그리고 기록을 남기고자 포스팅하고 있습니다. Static Area 자바 코드 내에 있는 3가지 영역(필드, 생성자, 메소드) 중 필드 부분에서 선언된 변수(전역변수)와 정적변수(static변수)를 static 영역에 데이터를 저장합니다. static 영역의 데이터는 프로그램의 시작부터 종료가 될 때까지 메모리에 남게 됩니다. 따라서 전역변수를 무분별하게 많이 사용할 경우, 메모리가 부족할 우려가 존재합니다. Stack Area 메소드 내에서 정의하는 기본 자료형(이하 타입) [int, double, boolean, byte 등)에 해당되는 지역변수의 데이터 값이 저장되는 영역으로, 해당 메소드가..

공부/Java 2022.03.01

[공부/자바] JVM과 작동원리

자바라는 프로그래밍 언어는 어떤 플랫폼에서든 소스코드 변경이 없어도 실행할 수 있습니다. 즉 어떤 CPU나 OS에서든 실행할 수 있단 뜻입니다. 그래서인지는 몰라도 웹 어플리케이션 개발에도 사용되고, 안드로이드에서도 코틀린을 밀어주기 이전엔 자바로 기능들을 구현했습니다. 이를 가능하도록 이번 주제인 JVM이 있었기 때문입니다. JVM이란? JVM은 원래 Java Virtual Machine의 약어로, "자바 가상 머신"이라고 번역할 수 있습니다. 가상 머신의 정의는 다음과 같습니다. 특정한 프로그램이 실행될 수 있도록 컴퓨터에 가상 실행 환경을 만들어 주는 소프트웨어가 설치된 컴퓨터 JVM 검색 결과의 문서를 찾아보면 JVM은 자바 바이트코드를 실행할 수 있는 주체다. 일반적으로 인터프리터나 JIT 컴파..

공부/Java 2022.02.27

[공부/자바] JCF (Java Collection Framework)란?

자바 컬랙션 프레임워크 (JCF) 란? Java에서 데이터를 저장하는 기본적인 자료구조들을 한 곳에 모아 관리하고 편하게 사용하기 위해서 제공하는 것을 의미한다. 즉, 데이터를 담는 그릇들에 대한 정의를 모아놓은 프레임워크를 의미하며, 값의 성격이나 용도에 따라서 활용 방법에 따라 다양한 컨테이너를 제공한다. 다음은 JCF의 상속 구조이며 사용 용도에 따라 List, Set, Map 3가지로 요약할 수 있다. 각 인터페이스별 특징 List Interface (순서 O, 중복 O) LinkedList : 양방향 포인터 구조로, 데이터의 삽입/삭제가 빈번할 경우 유용하다(데이터의 위치 정보만 수정하면 되기 때문에). 스택/큐/양방향 큐 등을 만들기 위한 용도로 사용된다. 검색은 ArrayList에 비해 비효..

공부/Java 2022.02.26

[공부/자바] 프로세스와 쓰레드의 차이

프로세스, 쓰레드, 그리고 JVM 쓰레드, 멀티 프로세스, 멀티 쓰레드. 이렇게 5가지를 설명하고자 합니다. 프로그램(Program)이란? 사전적 의미: 어떤 작업을 위해 실행할 수 있는 파일 프로세스(Process)란? 사전적 의미: 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체) 운영체제로부터 시스템 자원을 할당받는 작업의 단위 즉, 동적인 개념으로는 실행된 프로그램을 의미합니다. 할당받는 시스템 자원의 예시) CPU 시간, 운영되기 위해 필요한 주소 공간, Code Data, Stack, Heap의 구조로 있는 독립적인 메모리 영역 특징) 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap)을 할당 받음..

공부/Java 2022.02.23

[공부/자바] SOLID에 대해서

SOLID란? 객체지향 설계 5원칙인 SOLID, 각 원칙들의 영어 앞글자를 따서 SOLID라고 합니다. SPR (Single Responsiblity Principle): 단일 책임 원칙 OCP (Open Closed Principle): 개방 폐쇄 원칙 LSP (Liskov Subsitution Principle): 리스코프 치환 원칙 ISP (Interface Segregation Principle): 인터페이스 분리 원칙 DIP (Dependency Inversion Principle): 의존 역전 원칙 위 원칙들은 응집도를 높이고, 결함도는 낮추자는 고전 원칙을 객체 지향의 관점에서 재정립한 것으로 볼 수 있습니다. SRP (Single Responsiblity Principle)이란? SRP ..

공부/Java 2022.02.22

일단 마시고 본다. (제네릭)

자바는 최적화를 시키는 데 도움을 주는 형태인 generic이 있습니다. 제네릭은 코드를 최적화 및 일반화시키는 데 있어 굉장한 도움을 줍니다. 자바를 한 지 얼마 되지않으셨거나 혹은 제네릭을 쓰지않은 채로 개발을 하면 중복코드가 굉장히 많이 생길뿐더러 중복 클래스 역시 많이 생깁니다. (물론 예외처리시에는 중복 클래스를 여러개를 사용하는 경우가 더러 있습니다.) 예시를 들어 설명해드리자면 어떠한 형태를 입출력하는 클래스를 만든다고 가정을 해봅시다. 그러면 대표적인 형태인 정수(Integer), 부동소수점수(Float), 실수(Double), 문자열(String) 등 여러가지가 있을 겁니다. 이를 하나하나 클래스로 나타나면 대충 이런 형태일 겁니다. public class IntegerPrinter { ..

공부/Java 2022.01.08

일단 마시고 본다. (인터페이스 default와 static)

제가 자바를 독학으로 3년정도하였는 데도 역시 가끔 까먹는 경우가 발생하여 이를 계속 이해하고 기억하고자 글을 쓰게 되었습니다. 제목이 일단 마시고 본다. 의 의미는 자바의 유래로 말장난을 한 것입니다. (자바 언어는 자바 커피에서 유래된 이름입니다. 그래서 일단 자바를 마시고 나서 이해를 하자. 즉, 일단 개발해보면서 차차 이해해가자 라는 의미입니다.) 먼저 다른 중요한 것들은 다 빼먹고 인터페이스부터 시작하는 이유는 인터페이스의 default 메소드와 static 메소드 때문에 쓰기 시작했습니다. 일단 둘 다 인터페이스에서 메소드를 정의를 하여 이를 그대로 사용할 수 있다는 공통점이 있지만 자바는 최적화 언어의 대명사처럼 굳이 똑같은 기능들 2개나 제공해주지않았을 거라는 믿음에서 천천히 알아보았습니다..

공부/Java 2022.01.05