본문 바로가기

Java9

[Java] Java GC 쉽게 이해하기 ✋🏻 들어가며.. 기존에는 책 내용을 그대로 작성하고(거의 필사수준,,) 나 자신이 이해하기 위해서 블로그 글을 작성했다면, 이제는 남에게 설명하듯이 블로그 글을 작성하려 합니다. 이전 글들과 서술 방식이 다를 수 있습니다. GC란 우리는 Java 프로그래밍을 하면서 new라는 키워드를 사용하여 객체를 생성합니다. 이 때 new가 붙은 객체는 Heap 영역에 동적으로 메모리를 할당해줍니다. 이렇게 동적으로 할당된 메모리는 더 이상 사용하지 않으면 해제되어야 합니다. 해제하지 않으면 메모리를 계속해서 점유하고 있으므로 OutOfMemmory Exception 이 발생할 수 있습니다. 이렇게 동적으로 할당된 메모리를 해제해주는 작업을 하는 것이 GC입니다. 정리하자면 다음과 같습니다. GC란 Garbage .. 2021. 10. 15.
[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]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] 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.
[Java]추상클래스와 인터페이스(차이,공통점) 추상클래스란? 추상클래스(abstract class)란 클래스 내부에 추상적인 기능을 가질 수 있는 클래스를 말한다. 추상적으로 메소드를 선언하여 상속을 통해서 자식클래스에서 완성하도록 유도하는 클래스이다. 상속을 위한 클래스이기 때문에 객체를 따로 생성할 수 없다. 추상클래스의 특징 객체(인스턴스) 생성이 불가능하다. class 앞에 "abstract" 예약어를 사용하여 추상클래스라는 것을 명시해야 한다. 추상메소드를 가질 수 있다. abstract으로 선언된 메소드가 하나라도 존재한다면, 그 클래스는 반드시 abstract으로 선언되어야 한다. 추상클래스는 단일상속만 가능하며 일반 변수, 메소드를 가질 수 있다. 추상메소드의 특징 추상클래스 내부에서만 구현할 수 있다. 메소드에 "abstract" 키.. 2021. 8. 21.
[Java] 다형성(polymorphism)이란? 📚 멘토님이 다형성은 무엇인지, 왜 사용하는지에 대해서 물어보셨는데 머릿속으로는 뭔지 그려지는데 막상 대답을 하려니 내가 아는 내용이 맞는지 의심이 들었고, 현재 알고있는 내용도 어떻게 설명해야하는지 말문이 턱 막혔다. 알고있다고 생각했지만 대답을 못했던,,^^ 자바에서 매우매우 중요한 OOP(객체지향언어)의 특징 중 하나인 다형성에 대해서 알아보도록 하자! 다형성(polymorphism)이란? 객체지향개념의 중요한 특징 중의 하나인 다형성은 '하나의 객체가 여러 가지 타입을 가질 수 있는 것'을 의미한다. 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현했다. 다형성은 상속, 추상화와 더불어 객체 지향 프로그래밍을 구성하는 중요한 특징 중 하나다.. 2021. 8. 15.
[Java] 상속(Inheritance)에 대해서 📚 이전에 오버로딩과 오버라이딩의 차이점에 대해서 글을 작성했다. 이번 글에서는 오버라이딩에 대해서 더 확실하게 이해하기 위해서 상속에 대한 정리를 해보려고 한다. 자바에서 상속이란? 일반적으로 생각했을 때 상속이란 무언가를 부모에게 물려받는 것을 말한다. Java에서의 상속도 비슷하다. 부모클래스의 변수와 메소드를 상속을 통해 자식클래스에서 사용할 수 있게 해준다. 조금 더 깊게 말하자면, 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미한다.(확장의 개념) 이때 기존에 정의되어 있던 클래스를 부모클래스(parent class) 또는 상위클래스(super class)라고 부르며, 상속을 통해 새롭게 작성되는 클래스를 자식클래스(child class) 또는 하위클래스(sub.. 2021. 8. 14.
[Java] 오버라이딩(Overriding)과 오버로딩(Overloading)의 차이점 오버로딩(Overloading)이란? 메소드도 변수와 같이 같은 클래스내에서 구분이 필요하기 때문에 메소드 명이 각기 달라야한다. 하지만 자바에서는 메소드명이 같더라도 매개변수의 개수 또는 타입이 다르면 같은 이름을 사용해서 메소드를 정의할 수 있다. 이처럼 한 클래스 내에 같은 이름의 메소드를 여러개 정의하는 것을 '오버로딩(Overloading)'이라고 한다. 오버로딩(Overloading)의 조건 메소드 이름이 같아야 한다. 매개변수 또는 타입이 달라야한다. 예제 public Class Overloading{ // 매개변수 미존재 void play() { System.out.println("매개변수 미존재"); } // 매개변수 int형 1개 void play(int a) { System.out.p.. 2021. 8. 11.
[Java] 변수(Variable)와 자료형(Data type) 자바에서의 변수(Variable) 변수란? 내용을 어딘가에 담아두어야 할 때 사용되는 것을 "변수(variable)"라고 부른다. 변수의 종류 지역 변수 local variables : 중괄호 내에서 선언된 변수 매개 변수 parameters : 메소드에 넘겨주는 변수 인스턴스 변수 instance variables : - 메소드 밖에 , 클래스 안에 선언된 변수. 앞에는 static이라는 예약어가 없어야 한다. 클래스 변수 class variables : 인스턴스 변수처럼 메소드 밖에, 클래스 안에 선언된 변수 중에서 타입선언 앞에 static이라는 예약어가 있는 변수 public class VariableTypes{ int instanceVariable; static int classVariable;.. 2021. 7. 18.