본문 바로가기

Language/Java28

[Java] 자바와 객체지향 본 글은 📚 스프링 입문을 위한 자바 객체지향의 원리와 이해 를 읽고 정리한 내용입니다. 객체지향을 이해하기 위해 먼저 큰 그림을 생각해보자. 세상에 존재하는 모든 것은 사물, 즉 객체(Object)이다. 각각의 사물은 고유하다. 사물은 속성을 갖는다. 사물은 행위를 한다. 그리고 사물을 하나하나 이해하기 보다 사물을 분류(class)해서 이해하는 것이 인간의 인지법이다. 직립보행을 하며 말을 하는 존재를 사람이라고 분류한다. 연미복, 짧은 다리, 날지 못하는 새를 펭귄이라고 분류한다. 밤하늘에 반짝이는 사물들을 별이라고 분류한다. 김종민(Object), 김연아(Object), 수지(Object)라고 하는 존재는 사람이라고 하는 분류(class)에 속한다. 그리고 사람은 나이, 몸무게, 키라는 속성(pr.. 2021. 9. 26.
[Java] 멀티 스레드/ 멀티 프로세스의 이해 본 글은 📚 스프링 입문을 위한 자바 객체지향의 원리와 이해 를 읽고 정리한 내용입니다. 프로그램이 메모리를 사용하는 방식은 코드 실행 영역과 데이터 저장 영역으로 나뉘고, 객체 지향 프로그램에서는 위의 그림과 같이 데이터 저장영역을 다시 세 개의 영역으로 분할해서 사용한다. 멀티 스레드(Multi Thread)의 T 메모리 모델은 스택 영역을 스레드 개수만큼 분할해서 쓰는 것이다. 아래의 그림을 참고하자. 멀티 프로세스(Multi Process)는 다수의 데이터 저장 영역, 즉 다수의 T 메모리 모델을 갖는 구조이다. 아래의 그림을 참고하자. 멀티 프로세스 각 프로세스마다 각자의 T메모리가 있고 각자 고유의 공간이므로 서로 참조할 수 없다. 하나의 프로세스가 다른 프로세스의 T메모리 영역을 절대 침범할.. 2021. 9. 26.
[Java] JDK, JRE, JVM 에 대해 간단히 살펴보기 JDK (Java Development Kit) - 자바 개발 도구 : JVM용 소프트웨어 개발 도구 JRE (Java Runtime Environment) - 자바 실행 환경 : JVM용 OS JVM (Java Virtual Machine) - 자바 가상 기계 : 가상의 컴퓨터 자바 개발도구인 JDK를 이용해 개발된 프로그램은 JRE에 의해 가상의 컴퓨터인 JVM 상에서 구동된다. 다만 배포되는 JDK, JRE, JVM은 편의를 위해 JDK가 JRE를 포함하고 다시 JRE는 JVM을 포함하는 형태로 배포된다. 위의 그림처럼 JDK는 자바 소스 컴파일러인 javac.exe를 포함하고 있고, JRE는 자바 프로그램 실행기인 java.exe를 포함하고 있다. 참고 - 스프링 입문을 위한 자바 객체지향의 원리 2021. 9. 26.
[Java] 멀티쓰레드 동기화 - synchronized 쓰레드의 동기화 씽글쓰레드의 경우에는 하나의 프로세스 내에서 하나의 쓰레드만 작업하기 때문에 프로세스의 자원에 대한 문제가 딱히 없다. 하지만 멀티쓰레드의 경우 여러개의 쓰레드가 하나의 프로세스 내의 자원을 공유하기 때문에 서로의 작업이 프로세스 내에서 공유하는 공유자원에 영향을 끼칠 수 있다. 예를들어, A 쓰레드가 공유자원을 가져다 작업을 하던 도중 B 쓰레드에게 제어권이 넘어가게 될 경우 다시 A 쓰레드가 제어권을 가지고 작업을 마무리 했을 때 원하는 결과가 도출되지 않을 가능성이 있다. 이러한 일이 발생하지 않도록 하기 위해서는 A 쓰레드가 작업이 끝나기 전까지 다른 쓰레드에게 제어권이 넘어가지 않도록 하는 것이 필요하다. 그래서 도입된 개념이 '임계영역'과 '잠금(lock)'이다. '임계영역'이.. 2021. 9. 11.
[Java]Java 에서의 I/O(입출력)-Stream File과 Files 자바에서는 java.io 패키지에 File이라는 클래스가 존재한다. 이 패키지는 파일뿐만 아니라 파일의 경로(path)의 정보도 포함하는 클래스이다. 때문에 유닉스 계열의 파일에서 사용하는 몇몇 기능을 제대로 제공하지 못한다. 이러한 문제를 해결하기 위해 Java 7부터 Files라는 클래스가 등장했다. Files 클래스는 기존에 있던 File 클래스에 있던 메소드를 대체하여 제공하며 모든 메소드가 static으로 선언되어 있어 객체를 따로 생성하지 않아도 된다는 장점이 있다. I/O I/O이란 Input과 Output의 약자로서 컴퓨터 내부 또는 외부의 장치와 프로그램간의 데이터를 주고받는 것을 말한다. 예를 들면, 키보드로부터 데이터를 입력받는다던가 System.out.print.. 2021. 9. 11.
[Java]Serializable(직렬화)란? Serializable(직렬화)란? 직렬화(Serialization)란 자바 시스템 내에서 사용하는 객체 또는 데이터를 자바시스템 외에서도 사용할 수 있도록 Byte 형태로 데이터를 변환하는 기술이다. Byte로 변환된 데이터를 다시 자바의 객체로 변환하는 기술을 역직렬화(Deserialization)라고 한다. 말로 풀어서 설명하면 Serializable란 컴퓨터의 메모리 상에 존재하는 데이터를 파일로서 저장하거나, 통신하는 다른 컴퓨터에게 알맞은 형식으로 맞추어 전달하기 위해 byte Stream형태로 만드는 것을 의미한다. 프로그램에서 사용되는 데이터들은 연속적으로 위치해 있지 않고 내부적으로 포인터에 의해 참조되고 있는데, 이는 실행중인 컴퓨터에서만 인식이 가능하기 때문에 다른 컴퓨터와 통신하기 .. 2021. 9. 5.
[Java] 불변객체(Immutable Object)에 대해 알아보자 📚 이번주 멘토링 시간에 책을 꼼꼼히 읽었다고 생각했는데 막상 질문 주신 것에 대해 답변을 못했다. 그 이유는 온전히 내 것으로 만들지 못했기 때문에라고 생각한다. 이번주부터는 읽은 내용과 이해한 내용을 모두 블로그에 정리하며 "~~가 뭔가요?"라는 질문에 대답할 수 있게끔 공부한 내용을 머릿속에 집어넣을 예정이다. 불변 객체(immutable object) 란? 객체 지향 프로그래밍에 있어서 불변객체(immutable object)는 생성 후 그 상태를 바꿀 수 없는 객체를 말한다. 그렇기 때문에 한 번 생성이 되면 신뢰할 수 있는 객체가 된다. 가장 대표적인 불변객체로는 String, Integer, Boolean, BigDecimal ...이 있다. 아래의 예제는 String을 예로 들었다. Str.. 2021. 8. 29.
[Java]equals()와 hashCode()에 대해서 알아보자(동등성 동일성) 이번엔 Object 클래스의 equals()와 hashCode()에 대해서 알아보려 한다. 그 전에 제목에 적어놓은 동등성과 동일성의 개념부터 짚고 넘어가자 동등성 객체의 내부값을 비교하는 것을 말한다. 동등성은 equals()로 비교하며 주로 참조자료형을 비교할 때 사용한다. 동일성 객체 인스턴스의 주소값을 비교하는 것을 말한다. 동일성은 == 로 비교하며 기본자료형은 == 연산자를 통해 값 비교가 가능하다. 기본 자료형을 비교할 때 == 연산자를 사용한다. 참조 자료형을 비교할 땐 ==를 사용하면 참조값(메모리 주소)을 비교하기 때문에 객체의 내부값이 같더라도 비교할 수가 없다. Object의 equals() equals()를 사용하면 객체의 내부값을 비교할 수 있다는 것은 위에서 언급을 했으니 알 .. 2021. 8. 29.
[Java] ConcurrentHashMap에 대해 알아보자 멀티스레드 환경에서 고려해야 할 사항은 바로 동시성이다. 동시성이란, 하나의 CPU에서 여러개의 작업이 일어나는 것처럼 보이는 것이다. 동시성을 고려하지 않으면 멀티쓰레드 환경에서 하나의 변수에 여러개의 쓰레드가 동시에 접근할 경우 그 변수의 값은 원하는 값으로 반환되지 않는다. 자바에서는 이런 멀티스레드 환경에서의 동시성을 위해 다양한 방법을 제공하는데 대표적인 것이 Atomic Type, volatile, synchronyzed 이렇게 세가지이다. 각기 다른 CPU1, CPU2에서 쓰레드를 실행시키고 공유자원인 변수를 연산할 때 메인메모리의 값을 읽어오는 것이 아니라 각 CPU내 캐시메모리에 값을 옮기고 그 값으로 연산을 한 뒤 메인메모리에 반영을 한다. 서로 다른 CPU내 캐시메모리는 다른 CPU내.. 2021. 8. 28.
[Java] String literal 과 new String() 의 차이 String literal & new String() 자바에서는 String 문자열 생성 방식은 두가지가 있다. 1, String literal 2. new String() 두개는 어떤 차이가 있을까? 둘의 차이는 저장되는 저장공간(메모리)의 차이이다. new 연산자를 사용하여 String을 생성하게 되면 객체로 생성이 되어 Heap메모리 영역에 저장이 되고, 리터럴(literal)을 사용하여 String을 생성할 경우 String constant pool이라는 영역에 생성이 된다. 리터럴을 사용하여 생성할 때 constant pool에 같은 값이 존재한다면 생성되는 객체는 이미 존재하고 있는 값을 참조하게 된다. 아래의 예제와 그림을 통해서 이해를 도와보자. String str1 = new String.. 2021. 8. 22.