CS/Java (CS) 9

[Java] String, StringBuffer, StringBuilder

String, StringBuffer, StringBuilder 분류 String StringBuffer StringBuilder 변경 Immutable (불변) Mutable (가변) Mutable 동기화 Synchronized 가능 (Thread-safe) Synchronized 불가능 1. String 클래스의 특징 (객체 생성 방법에 따른 차이) String은 기본형(int, floa, char 등)과는 다르고, 첫 글자가 대문자로 시작하는 클래스이다. 1. new 연산을 통해 생성된 인스턴스의 메모리 공간은 변하지 않음 (Immutable) 값이 같은 String은 String Pool 내에서 String 객체를 공유 // 1. String s1 = "Hello"; // 2. String s2 ..

CS/Java (CS) 2024.02.04

[Java] 객체지향 프로그래밍 (OOP)

0. 객체지향 프로그래밍(OOP)이란? 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 '객체'를 만들고, 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다. 💡 객체란? → 객체란 하나의 역할을 수행하는 '메소드와 변수(데이터)'의 묶음 ※ 참고 : OOP란? → Object-Oriented Programming 1. 객체지향의 장단점 ➕ 장점 ▶ 코드 재사용이 용이 남이 만든 클래스를 가져와서 이용할 수 있고 상속을 통해 확장해서 사용할 수 있음. ▶ 유지보수가 쉬움 절차 지향 프로그래밍에서는 코드를 수정해야할 때 일일이 찾아 수정해야하는 반면, 객체 지향 프로그래밍에서는 수정해야 할 부분이 클래스 내부에 멤버 변수 혹은 메서드로 존..

CS/Java (CS) 2023.11.07

[Java] 오토 박싱 & 오토 언박싱

✔️ 오토 박싱 & 오토 언박싱 자바에는 기본 타입(primitive type)과 Wrapper 클래스가 존재한다. 기본 타입 (primitive type) : stack 에 값을 저장 정수 타입(byte, short, int, long) 소수 타입(float, double) bool 타입(boolean) 문자 타입(char) Wrapper 클래스 : stack 에 주소를 저장하고 heap 에서 값을 참조 정수 타입(Byte, Short, Integer, Long) 소수 타입(Float, Double) bool 타입(Boolean) 문자 타입(Character) 값 비교에는 equals를 사용합니다. ==는 인스턴스의 주소비교에 사용 ✔️ 박싱 기본 타입 데이터에 대응하는 Wrapper 클래스로 만드는 ..

CS/Java (CS) 2023.11.07

[Java] 예외 처리(Exception Handling)에 관하여

이제야 정리하는... 글로만 읽어선 머릿속에 안 들어온다. 시간이 오래 걸리지만, 그래도 글로 써야겠다는 생각이 든다. ✔️ 예외 처리(Exception Handling) 예외처리란, 프로그램 실행 흐름 상 오류가 발생했을 때 그 오류를 대처하는 방법이다. 💡 프로그램 오류 프로그램 실행 중 어떤 원인에 의해 프로그램이 해당 상황에 대처하지 못할 경우, 비정상적으로 종료되거나 에러 팝업창이 뜨는 경우이다. ✔️ 발생 시점에 따른 에러 분류 💡 Compile Error 컴파일 시점에서 발생하는 에러로, 소스코드를 컴파일러가 컴파일 하는 시점에서 소스의 오타나 잘못된 구문, 자료형 체크 등 검사를 수행하는데 발생하는 에러이다. 이 시점에서 발생하는 문제들은 수정 후 컴파일을 성공적으로 마칠 경우 클래스 파일..

CS/Java (CS) 2023.02.10

[Java] JVM과 Garbage Collection 동작 원리

이번 포스팅은 JVM 동작 원리와 GC 동작원리에 관한 내용이다. JVM과 GC 동작원리 역시 근본 중의 근본인 내용이지만, 이제야 정리한다. 먼저 들어가기 전... ✔️ JVM, JRE, JDK 정리 JVM (Java Virtual Machine) 자바 프로그램이 어느 기기, 어느 운영체제에서도 실행될 수 있게 만들어준다. 자바 프로그램의 메모리를 효율적으로 관리 & 최적화 해준다. JRE (Java Runtime Environment) JVM이 원활하게 잘 작동될 수 있도록 환경을 맞춰주는 역할을 한다. (JRE에 클래스 로더도 포함됨) JDK (Java Development Kit) JDK 에는 JRE에 없는 자바 컴파일러를 포함하고 있다. 자바로 개발을 하고 싶다면, 설치해야 한다. ✔️ JVM ..

CS/Java (CS) 2023.01.29

[Java] 자바 개념 정리

내가 보려고 정리 중 출처 맨 밑에 적어놨지만 혹시 몰라 위에도 적어 놓음. 주로 참고한 블로그 1, 블로그 2 [Java] Java의 특징을 설명해라 - Java는 객체지향 프로그래밍 언어이다. - 기본 자료형을 제외한 모든 요소들이 객체로 표현되고, 객체지향 개념의 특징인 캡슐화, 상속, 다형성이 잘 적용된 언어이다. - 장점 - JVM(자바가상머신) 위에서 동작하기 때문에 운영체제에 독립적이다. - GarbageCollector를 통한 자동적인 메모리 관리가 가능하다. - 단점 - JVM 위에서 동작하기 때문에 실행 속도가 상대적으로 느리다. - 다중 상속이나 타입에 엄격하며, 제약이 많다. 객체지향이란? - 데이터를 추상화 시켜 상태와 행위를 가진 객체를 만들고, 그 객체들 간의 유기적인 상호작용..

CS/Java (CS) 2023.01.19

[Java] 자바 스트림(JAVA Stream)

※ Java 8버전 이상부터 Stream API 지원 스트림 Streams이란? 람다를 활용할 수 있는 기술 중 하나. ※ Java 8 이전 배열 또는 컬렉션 인스턴스를 다루는 방법 : for 또는 foreach 문을 돌면서 요소 하나씩을 꺼내서 다루는 방법 문제는? → 간단한 경우라면 상관없지만, 로직이 복잡해질수록 코드의 양이 많아져 여러 로직이 섞이게 되고, 메소드를 나눌 경우 루프를 여러 번 도는 경우가 발생 반면, 스트림은 '데이터의 흐름’이다. → 컬렉션에 저장되어 있는 엘리먼트들을 하나씩 순회하면서 처리할 수 있는 코드 패턴. → 람다식과 함께 사용되어 컬렉션에 들어있는 데이터에 대한 처리를 매우 간결한 표현으로 작성 가능. → 내부 반복자를 사용하기 때문에 병렬처리가 쉽다. ※ 병렬처리 :..

CS/Java (CS) 2022.12.27

[Java] 직렬화(Serialization)

직렬화(Serialization)란? 자바 시스템 내부에서 사용되는 객체(Object) 또는 데이터(Data)를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술 ※ 쉬운 설명 ● 데이터 직렬화 → 메모리를 디스크에 저장하거나, 네트워크 통신에 사용하기 위한 형식으로 변환하는 것 (자바의 객체를 바이트의 배열(byte[])로 변환) ● 데이터 역직렬화 → 디스크에 저장한 데이터를 읽거나, 네트워크 통신으로 받은 데이터를 메모리에 쓸 수 있도록 변환하는 것 (저장된 것을 다시 객체(Object)로 변화) 직렬화를 하는 이유? → 직렬화가 된 데이터는 언어에 따라서 텍스트 또는 바이너리 등의 형태가 되는데, 이는 파일 저장이나 네트워크 전송 시 파싱이 가능한 유의미한 ..

CS/Java (CS) 2022.12.24

[Java] Thread 활용

이전 주제들 클린코드 & 리팩토링 & 시큐어코딩 객체지향 프로그래밍 (OOP) 테스트 주도 개발 (TDD) String, StringBuffer, StringBuilder 타입변환 Casting (업캐스팅 & 다운캐스팅) 오토 박싱 & 오토 언박싱 설명이 잘 되어있는 블로그! https://connie.tistory.com/12 Thread (스레드)란? 운영체제나 JVM에서 태스크(작업)을 실행하는 단위 → 하나의 스레드는 하나의 작업밖에 수행할 수 없다. ※ Java에서 스레드(Thread)란 무엇인가? → 스레드를 사용하기 전 기존 자바에서는 car.open(); car.entrance(); 이렇게 코드 두 줄이 있다고 하면 car.open()을 수행한 후에 car.entrance();를 수행하게 ..

CS/Java (CS) 2022.12.21