☕JAVA/🔎 공부 [JAVA] 40

[JAVA] Heap 모니터링 & Heap Dump 분석하기

Heap Memory 모니터링 & Heap Dump Spring으로 개발한 웹어플리케이션을 운영하다보면, 어떠한 이유로 사용하지 않는 메모리가 쌓이면서 메모리 누수현상이발생할 수 있다. 이를 방치하면 GC(Garbage Collection)가 과도하게 일어나면서 어플리케이션의 성능이 저해되거나, 심한 경우에는 OOM(Out Of Memory)이 발생하여 결국 어플리케이션이 죽게 된다. 따라서 주기적으로 Heap 영역을 모니터링하고, 의심되는 상황이 있다면 Heap Dump를 떠서 어떤 객체가 원인이 분석해야 한다. 즉 장애가 났을 때의 Heap 상태를 기록으로 남겨 그 당시에 어떤 Java 객체들이 많이 만들어졌는지 분석해보아야 한다. Heap Dump 파일 추출하는 방법 Java Application ..

[JAVA] JVM의 구조 와 메모리 구조

JVM 구조 자바의 주요 장점 중 하나인 OS 플랫폼의 독립성이 있다. WORN (wtite once, run anywhere) 이를 가능하게 하는 것이 바로 JVM이다. 자바소스코드를 컴파일러가 컴파일하면 컴퓨터가 직접 해석 및 실행할 수 있는 바이트 코드가 되고 이를 JVM이 실행하여 Class Loader -> Bytecode verifier -> interpreter를 거쳐 자바 소스가 어느 환경에서든지 잘 구동 될 수 있도록 해준다. JVM 구성요소 ClassLoader 컴파일러가 만든 클래스 파일을 JVM 내의 메모리영역 (Runtime Data Area)에 올리는 역할 이 과정은 런타임시 실행되지만, 필요하다면 계속해서 동작함. Garbage Collector 메모리 관리 기능을 자동으로 수..

[JAVA] BigDecimal 과 사칙연산

이케아 클론코딩 프로젝트에서 장바구니 파트를 맡았다. 필연적으로 돈 계산이 들어가는 부분인데 이때 배송비 / 총 금액 등을 그냥 int로 사용하면 안되고 BigDecimal을 사용해야한다고 알게되었다. BigDecimal 이란? Java 언어에서 숫자를 정밀하게 저장하고 표현할 수 있는 유일한 방법 double : 소수점을 저장할 수 있고 크키가 가장 큰 타입. 소수점의 정밀도에 있어 한계 Java 언어에서 돈과 소수점을 다운다면 BigDecimal은 필수 단점은 느린 속도와 기본 타입보다 불편한 사용법.. BigDecimal 기본상수 자주 쓰는 0, 1, 100은 쓰기 편하게 미리 상수로 정의되어 있음 // 흔히 쓰이는 값은 상수로 정의 // 0 BigDecimal.ZERO // 1 BigDecimal..

[JAVA] List 중복 제거

참고 블로그 [Java] List 중복 제거하는 2가지 방법 Java에서 List는 중복된 데이터를 가질 수 있습니다. List에 중복된 데이터가 있을 경우, 중복된 데이터를 제거하는 2가지 방법을 소개합니다. Set 이용하기 Stream 이용하기 - Java 8 이상 1. Set 이용하기 hianna.tistory.com Set 이용하기 Set은 중복을 허용하지 않는 객체로 List -> Set 변경하면 자연스레 중복이 제거됨. import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; public class RemoveListDuplicat..

[JAVA] 제네릭 Generic

참고 블로그 : 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 하는 방법 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것 => 특정한 타입을 미리 지정해주는 것이 아닌 필요에 의해 지정할 수 있도록 하는 일반 타입. 장점 - 잘못된 타입이 들어올 수 있는 것을 컴파일 단계에서 방지 가능 - 클래스 외부에서 타입을 지정해주기 때문에 따로 타입을 체크하고 변환해줄 필요가 없다=> 관리하기 편함 ㅎ - 비슷한 기능을 지원하는 경우 코드의 재사용성이 높아진다. 사용방법 보통 사용하는 타입명. 암묵적인 규칙일 뿐 다른 걸로 써줘도 무방 클래스 및 인터페이스 선언 public class ClassName { ... } public Interface In..

[JAVA] Map, HashMap

Map? : 키와 값으로 구성된 Entry 객체를 저장하는 구조를 가진 자료구조 : Key 와 Value를 한 쌍으로 갖는 자료형 리스트나 배열처럼 순차적으로(sequential) 해당 요소 값을 구하지 않고 key를 통해 value를 얻는다. key와 value는 모두 객체. value는 중복저장 가능하지만 key는 중복 안됨. key value apple 사과 banana 바나나 HashMap put key와 value가 String 형태인 HashMap을 만들고 위에서 보았던 예제의 항목값들을 입력해 보자. import java.util.HashMap; public class Sample { public static void main(String[] args) { HashMap map = new H..

[JAVA] 기초 - 다시 정리하는 기본 개념

분명히 공부도 하고 정리도 했는데 남는 게 없다.. 원래 이런가? 정의를 정확하게 외우는 것은 기술면접 전에 해야할 일이고 어떤때에 어떤 걸 써야 한다 정도로 알아두기!! 객체지향 프로그래밍 OOP 프로그래밍에 사용 될 데이터의 상태와 행위를 객체로 만들어, 객체 간의 상호작용을 통해 비지니스 로직을 구성하는 프로그래밍 기법 - 특징 상속 : 자식클래스가 부모클래스의 기능과 상태를 물려받아, 그대로 사용하거나 필요한 부분만 수정할 수 있도록 하는 것 추상화 : 불필요한 부분을 지우고 필요한 핵심만을 정의해 두는 것. 사물을 추상화 한 후 필요한 객체에서 상속 받아 필요에 맞게 기능을 재정의해 사용할 수 있도록 함 캡슐화 : 비슷한 속성과 메소드들을 하나의 클래스로 모은 것. 외부 접근으로부터 데이터를 지..

[JAVA] objects.equals() 정리

Objects.equals() : 객체의 주소를 비교 즉, 같은 값을 가진 객체라고 하더라도 따로 생성되었다면 False. //객체 비교시 !! public class Main{ public static void main(String args[]){ Name name1 = new Name("Ellen"); Name name2 = new Name("Ellen"); Name name3 = name1; System.out.println(name1.equals(name2)); // False System.out.println(name1.equals(name1)); // True } 다같은 이름으로 보이는데 False가 나옴 => 따로 생성되어 주소값이 다르기 때문! String aa = "cc"; String ..

[JAVA] 예외처리(Exception) / Throws

Exception 프로그램실행중 예기치 못한 사건을 예외라고 한다. 예외 상황을 미리 예측하고 처리할 수 있는데, 이렇게 하는 것을 예외 처리라고 한다. public class ExceptionExam { public static void main(String[] args) { int i = 10; int j = 5; int k = i / j; System.out.println(k); System.out.println(main 종료!!); } } 위 코드에서 j를 0으로 바꾸면 Excption 발생 j를 0으로 바꾸면 ArithmeticException이 발생하면서 프로그램이 종료된다. Java는 정수를 정수로 나눌때 0으로 나누면 안된다.0으로 나누면 오류가 발생하는 것입니다. 예외 처리 프로그래머는 ..

[JAVA] 내부클래스

클래스 안에 선언된 클래스 어느 위치에 선언하느냐에 따라서 4가지 형태가 있을 수 있다. 첫번째는 클래스 안에 인스턴스 변수, 즉 필드를 선언하는 위치에 선언되는 경우. 보통 중첩클래스 혹은 인스턴스 클래스라고 한다. 내부에 있는 Cal객체를 생성하기 위해서는, 밖에는 InnerExam1의 객체를 만든 후에 InnerExam1.Cal cal = t.new Cal();과 같은 방법으로 Cal객체를 생성한 후 사용한다. public class InnerExam1{ class Cal{ int value = 0; public void plus(){ value++; } } public static void main(String args[]){ InnerExam1 t = new InnerExam1(); InnerE..

[JAVA] 인터페이스

: 서로 관계가 없는 물체들이 상호 작용을 하기 위해서 사용하는 장치나 시스템 구현은 없고 어떤게 있다고 보여주는것 기능 구현하는 게 아니라 정의만 인터페이스는 자체적으로 타입의 역할은 가능하지만 객체 생성은 못함 동일한 인터페이스를 구현한다 = 클래스의 사용법이 동일! 클래스는 인터페이스를 구현해서 사용가능하고 인터페이스를 여러개 구현해서 사용도 가능 인터페이스 정의하는 방법 추상 메소드와 상수를 정의 할 수 있다. public interface TV{ public int MAX_VOLUME = 100; public int MIN_VOLUME = 0; public void turnOn(); public void turnOff(); public void changeVolume(int volume); pu..

[JAVA] 메소드 - 오버라이딩

2022.08.10 - [JAVA] - [JAVA] 상속 / super / 부모생성자 [JAVA] 상속 / super / 부모생성자 상속 : 부모가 가진 것을 자식에게 물려주는 것 노트북은 컴퓨터의 한 종류다. 컴퓨터(부모)-노트북(자식) 침대는 가구의 한 종류다. 혹은 침대는 가구다. 가구(부모)-침대(자식) => is a 관계 혹은 k wearegolden.tistory.com : 부모가 가지고 있는 메소드와 똑같은 모양의 메소드를 자식이 가지고 있는것 즉, 부모클래스의 메소드를 자식클래스에서 재정의하여 사용하는 것 부모클래스 public class Car1 {//부모클래스 public void run() { //부모 메서드 System.out.println("달리다"); } } 자식클래스 publi..

[JAVA] 추상클래스

: 구체적이지 않은 클래스 새,포유류, 가구 .. 등과 같이 구체적이지 않은 것. 추상클래스로 표현 가능하다 추상 클래스 정의하기 추상 클래스는 클래스 앞에 abstract 키워드를 이용해서 정의한다. 추상 클래스는 미완성의 추상 메소드를 포함할 수 있다. 추상 메소드란, 내용이 없는 메소드 이다. 즉 구현이 되지 않은 메소드이다. 추상 메소드는 리턴 타입 앞에 abstract라는 키워드를 붙여야 한다. 추상 클래스는 인스턴스를 생성할 수 없다. public abstract class Bird{//추상메소드가 하나라도 있으면 추상 클래스 public abstract void sing();//추상메소드 public void fly(){ System.out.println("날다."); } 추상 클래스를 상속..

[JAVA] 접근 제어자

클래스 {필드,메소드} - 캡슐화 : 관련된 내용을 모아서 가지고 있는 것 : 클래스 내에서 멤버의 접근을 제어하는 역할 한정자 클래스 내부 동일 패키지 하위 클래스 그외의 영역 public ⭕ ⭕ ⭕ ⭕ protect ⭕ ⭕ ⭕ ❌ default ⭕ ⭕ ❌ ❌ private ⭕ ❌ ❌ ❌ public : 어떤 클래스든 접근가능, 모든 접근을 허용, 가장 넓은 의미,전체공개 protected : 같은 패키지인 경우 접근 허용, 다른 패키지라도 상속을 받은 경우 접근허용 private : 자기 자신만 접근가능 default 접근지정자 : 아무것도 쓰지 않은 경우, 자기 자신과 같은 패키지 내에서 접근 허용 public > protected > default > private ❗필드 뿐아니라 메서드나 클래스..

[JAVA] 상속 / super / 부모생성자/ 클래스형변환

상속 : 부모가 가진 것을 자식에게 물려주는 것 노트북은 컴퓨터의 한 종류다. 컴퓨터(부모)-노트북(자식) 침대는 가구의 한 종류다. 혹은 침대는 가구다. 가구(부모)-침대(자식) => is a 관계 혹은 kind of 관계 라고 한다. Car 를 상속받은 Bus 를 class로 표현하는 방법 public class Car{ } public class Bus extends Car{ } public class 클래스명 extends 부모클래스명 자바는 클래스 이름 뒤에 extends 키워드를 적고 부모클래스 이름을 적게 되면 부모 클래스가 가지고 있는 것을 상속받을 수 있게 된다. 상속이란 부모가 가지고 있는 것을 자식이 물려받는 것을 말한다. 즉, 부모가 가지고 있는 것을 자식이 사용할 수 있게 된다. ..