[Java] 까먹지 말아야 할 Java 메모리 구조
·
Java/Basic
자바의 메모리 구조 메서드 영역 (Method Area)메서드 영역은 프로그램을 실행하는데 필요한 공통 데이터를 관리하는 영역이다 -> 프로그램의 모든 영역에서 접근 가능- 클래스 정보 : 클래스의 코드, 필드, 메서드, 생성자등 모든 코드 존재- static 영역 : static 변수 보관- 런타임 상수 풀 : 프로그램을 실행하는데 필요한 공통 리터럴 상수 보관 -> 이후 네트워크 부분에서 사용되는 PORT 번호 등을 사용할 때 접근 스택 영역 (Stack Area)우리가 흔히 스레드라고 칭하는 그 스택이다. 스레드별로 하나의 실행 스택이 존재하며, 이 스택 영역에 스택 프레임을 저장 -> 지역변수, 메서드 호출 정보 등 보관- 스택 프레임 : 메서드를 호출할 때마다 하나의 스택 프레임이 쌓이고, 메서..
[Java] 예외처리 - 부모 자식 관계
·
Java/Basic
자바는 모든 것이 객체다. 예외도 객체고 스레드도 객체고 너도 객체고 나도 객체다.오늘은 간단히 예외처리의 부모자식 관계에 대해 포스팅하겠다! 예외도 위 아래가 있어요예외도 상위 타입의 예외가 있고, 그것을 상속받는 하위 타입의 예외가 있다.본 포스팅에서는 뭐가 상위 타입 예외이고 뭐가 하위 타입 예외인지에 대한 것이 중요한게 아니기 때문에, 설명은 패스한다. 이번 주제에 대한 쉬운 이해를 위해 아래와 같은 코드가 있다고 가정하자(실제 동작하는 코드는 아님)//부모 클래스class Parent { void method() throws InterruptedException { // ... } } //자식 클래스class Child extends Parent { @Overr..
[Java] 불변 객체 (Immutable Instance) , 사이드 이펙트(Side Effect)
·
Java/Basic
불변 객체란 무엇인가오늘 포스팅 할 것은 불변 객체이다.불변객체.. 이름부터 "변하지 않는 객체" 인 것 같지 않은가.. 얼마나 직관적인지..! 그전에 불변객체가 왜 필요한지를 알기 위해 빌드업부터 시작해보겠다.아무튼 우리가 자바에서 사용하는 데이터 타입에는 크게 두가지가 있다 바로 기본형과 참조형 이다.간단하게 예를 들면, 아래와 같다.int number = 10; // 기본형Object obj = new Object(); // 참조형기본형은 그냥 직관적으로 봐도 잘 알테고, 참조형은.. 확실하게 알지 못한다면 더 공부를 하고 와야한다..그냥 일단 참조형 -> 객체의 주소 값 저장 정도로만 알고 일단 킵고잉하자.먼저 기본형에 대해 예를 들어보면, 간단하게 a 에 10을 대입하고, b 에는 a의 값을 대..
[Java] StringBuilder - 가변 String
·
Java/Basic
String은 원래 불변이다원래 String은 불변 객체이다. → 즉 내부 값은 변경 불가그러므로, 객체의 값을 바꾸고 싶다면 기존의 값은 그대로 두고 기존 값 + 더할 값 을 통하여 새로운 객체를 생성해서 사용해야한다. 변경된 값을 기반으로 새로운 객체 생성시 단점예를 들어, A,B,C,D 를 더하여 ABCD 라는 필드 값을 만들고 싶은데, 이때,A + B 를 통해 AB 라는 새로운 객체가 만들어지고, AB+C라는 두번째 새로운 객체가 만들어지고,ABC+D 라는 세번째 새로운 객체가 만들어진다.이때 생성되는 새로운 객체들은 ABCD를 만들기 위한 발판일 뿐, 사용하거나 필요한 객체가 아니다.(메모리 낭비 → 즉 GC대상) 어떻게 해결할 수 있을까?String은 불변객체이다. 그러므로 계속 필요 없는 객..
[Java] String 클래스에서 사용되는 메서드 (주관적으로 중요한 메서드)
·
Java/Basic
문자열 정보 조회length() : 문자열의 길이를 반환한다.isEmpty() : 문자열이 비어 있는지 확인한다. (길이가 0)isBlank() : 문자열이 비어 있는지 확인한다. (길이가 0이거나 공백(Whitespace)만 있는 경우), 자바 11charAt(int index) : 지정된 인덱스에 있는 문자를 반환한다.문자열 비교equals(Object anObject) : 두 문자열이 동일한지 비교한다.equalsIgnoreCase(String anotherString) : 두 문자열을 대소문자 구분 없이 비교한다.compareTo(String anotherString) : 두 문자열을 사전 순으로 비교한다.compareToIgnoreCase(String str) : 두 문자열을 대소문자 구분 없이..
[Java] 다운 캐스팅 , instanceof
·
Java/Basic
다형성을 공부하면서 여러 가지 클래스를 상속하다보면, 슈퍼 클래스인 A 클래스를 참조하는 자식 클래스들의 인스턴스가 어떤 클래스를 참조하고 있는지 확인하고 싶다면, instanceof 키워드를 사용하면 된다.쉽게 얘기해서..//Parent 를 부모클래스, Child를 자식 클래스라고 가정Parent parent1 = new Parent();Parent parent2 = new Child();이때, Parent 는 자기 자신을 참조할 수 있을 뿐만 아니라, 자식 타입의 Child 인스턴스도 참조할 수 있다.이럴 때, parent1 과 parent2가 참조하는 인스턴스의 타입을 확인하고 싶다면, instanceof 키워드를 사용하면 된다. 구체적으로 아래와 같은 코드를 실행한다고 가정하자.public cla..
[Java] 절차 지향 프로그래밍(PP) VS 객체 지향 프로그래밍(OOP)
·
Java/Basic
절차 지향 프로그래밍 (Procedural Programming) VS 객체 지향 프로그래밍(Object Oriented Programming) 에 대해 포스팅 해보겠다사실 지난번에 객체 지향의 특성에 대해 올렸는데, 이번에는 이 둘의 차이점을 코드를 통해 쉽게 포스팅 해보고자 한다.사실 현대 트렌드는 거의 대부분 객체 지향 프로그래밍을 추구하는 추세이지만, 몇몇은 사실 두개의 개념을 아예 갈라치기 해놓고 생각하는 사람이 꽤 있는 것 같다.결론부터 말하자면, 이 두가지는 정반대로 대치되는 개념이 아니다아무리 객체 지향을 추구한다고 하더라도, 프로그램의 작동 순서는 반드시 중요한 개념이기 때문이다.간단하게 예를 들어, 우리가 ATM이라는 객체를 만들어 사용하기로 하고, 사용자의 입력을 기다리고 있는 상태다..
[Java] 향상된 for문 (for - each문)
·
Java/Basic
향상된 for 문 (for - each)문이란배열을 배우고 응용하다 보면 배열의 0번째 인덱스부터 끝까지 한번 돌리고 싶은데,우리가 그럴 때마다 어떻게 했는가? 일단 아래 예시를 보자.//기존 for 문 사용public class BaboFor { public static void main(String[] args) { int[] numbers = {1,2,3,4,5}; // 배열 초기화 for(int i = 0 ; i 단순히 배열을 순회하고 싶은데, 위 코드는 쓸데없이 귀찮은 작업들을 몇 가지 해줘야 한다.인덱스 변수 i 선언 → 메모리 낭비i i++을 통해 인덱스를 하나씩 증가 해줘야한다 이러한 귀찮은 작업들을 생략할 수 있는 아주 좋은 기능이 있는데, 이것이 바로 향상..
[Java] Java에서의 스코프(Scope)
·
Java/Basic
배그 하시는 분들 검색 키워드에 이끌려 오셨다면 죄송합니다ㅋㅋJava에서 스코프(Scope) 란 무엇인가?스코프(Scope)란 변수가 접근 가능한 범위를 의미한다.자세한건 아래 코드의 예제를 통해 설명하겠다.package scope;public class Scope1 { public static void main(String[] args) { int m = 10; //m 생존시작 if (true){ int x = 20; //x 생존시작 System.out.println(x); System.out.println(m); } // x 생존 종료 System.out.println(x); // 이건..