자바

·자바
Call By Value와 Call By ReferenceCall By Value는 함수의 인자를 전달할 때 값을 전달하는 방식으로 실제 인자로 전달되는 값은 복사된 형태로 전달되어 호출자의 원래 변수에는 영향을 미치지 않는다.Call By Reference 함수의 인자를 전달할 때 값이 아닌 주소를 전달하는 방식으로 Call By Value와 다르게 호출자의 원래 변수에 영향을 미칠 수 있다.두 방법의 차이는 인자로 값을 넘기냐, 주소를 넘기냐의 차이지만 Java 언어에서는 모든 인자들을 메서드에 전달할 때 값 형식 즉, Call By Value 형태로 전달하게 된다고 한다.여기서 의문인 점은 왜 모든 부분에서 Call By Value를 사용하는 것일까? 그리고 객체를 넘기면 그게 Call By Ref..
·자바
Mutable과 Immutable 객체프로그래밍 언어를 공부하다 보면 값을 변경할 수 있냐, 없냐에 따라서 객체를 구분 짓기도 한다.객체의 값을 변경할 수 있는 것을 Mutable(가변) 객체라고 하며 반대로 값을 변경하지 못하는 것을 Immutable(불변) 객체라고 한다.내가 공부하는 자바 언어 외에도 여러 언어에서 사용되는 개념이기 때문에 확실히 이해하고 넘어가면 좋을 것 같다.밑의 내용은 모두 자바 언어를 기준으로 설명한 내용이다. Mutable(가변 객체)먼저 Mutable(가변) 객체를 살펴보면 객체를 초기화 후 값을 변경할 수 있는 객체를 의미한다. 이러한 가변 객체는 객체가 생성된 후에 필드 혹은 상태와 같은 객체의 값을 변경할 수 있다.이러한 객체의 가변성은 변경 가능한 내부 데이터라는 ..
·자바
GC(Garbage Collection)이전에 자바의 JVM에 대해서 알아봤을 때 객체를 생성하게 되면 Heap 영역에 올라가게 된다고 알아봤다. Java - JVM(Java Virtual Machine)JVM(Java Virtual Machine)우리가 사용하는 컴퓨터는 0과 1로 이루어진 숫자만 이해할 수 있다. 하지만 개발할 때 보면 문자, 0과 1이 아닌 숫자들도 많이 사용하게 되는데 이러한 내용들은 컴퓨터가 바hotechstory.tistory.comHeap 영역에 올라온 객체를 참조하는 변수나 필드가 없다면 의미 없는 개체가 되므로 JVM이 GC를 통해 해당 객체를 Heap 영역에서 제거시킨다고 했는데 여기서 GC가 뭔지 알아보자.먼저 GC는 필요 없어진 메모리 객체(Garbage)를 모아(C..
·자바
JVM(Java Virtual Machine)우리가 사용하는 컴퓨터는 0과 1로 이루어진 숫자만 이해할 수 있다. 하지만 개발할 때 보면 문자, 0과 1이 아닌 숫자들도 많이 사용하게 되는데 이러한 내용들은 컴퓨터가 바로 이해할 수 없다.따라서 작성한 코드를 컴퓨터가 이해할 수 있는 0과 1의 숫자로 변환해주는 작업이 필요하게 되는데 이러한 과정을 컴파일이나 인터프리트라고 한다. 컴파일과 인터프리트의 차이를 잠깐 살펴보면 먼저 컴파일은 프로그램을 실행하기 전에 해당 코드들을 컴퓨터가 읽을 수 있는 0과 1의 숫자로 변환해주는 작업이다.컴파일 과정을 거치면 미리 변환해주는 과정을 거쳐야 되지만 이를 통해서 사전에 문제가 될 수 있는 부분들이 걸러질 수 있고, 변환된 코드를 컴퓨터가 한 번에 읽을 수 있기 ..
·자바
스레드(Thread) 스레드는 프로세스 내에서 실제 작업을 수행하는 것으로 모든 프로세스는 최소한 하나의 스레드를 가지고 있다. 스레드의 종류로는 단일 스레드, 멀티 스레드, 데몬 스레드로 나뉜다. 스레드는 공유 메모리를 사용하지만 동일한 메모리를 공유함에도 불구하고 다른 스레드의 작업에 영향을 주지 않는 스레드에 예외가 있는 경우 독립적으로 작동한다. (스레드풀?) 스레드를 사용하는 이유는 멀티 태스킹에 기여할 수 있는 스레드를 사용한다. 멀티 스레드 멀티 스레드는 하나의 자원에 여러 개의 스레드를 붙인 것을 의미한다. 멀티 스레드는 단일 스레드보다 시간이 더 걸릴 수 있는데 그 이유는 중간에 컨택스트 스위칭이 발생하기 때문이다. 멀티 스레드를 주로 사용하는 이유는 하나의 새로운 프로세스를 생성하는 것..
·자바
입출력 스트림 입출력이란 입력(Input)과 출력(Output)을 줄여서 부르는 것으로 두 대상 간의 데이터를 주고받는 것을 의미한다. 데이터를 주고 받을 때 스트림(Stream)이라는 것을 사용하게 되는데 데이터를 입출력하는 데 사용되는 연결 통로를 뜻한다. 하나의 스트림으로 입출력을 동시에 수행할 수 없는 단방향 통신만 가능하다. (동시에 하려면 2개의 스트림이 필요) 바이트 기반 스트림 바이트 기반 스트림은 데이터를 바이트 단위로 주고 받는다. public static void main(String[] args) throws IOException { FileInputStream fileInputStream = null; FileOutputStream fileOutputStream = null; tr..
·자바
자바를 처음 공부했을 때 들었던 생각이 있었다. 자바 버전이 17, 21 이런 식으로 있는데 JDK는 그럼 뭐지? 자바를 사용하려면 꼭 알아야 되는 건가? 그럼 JRE는 뭐지? 자바 언어를 사용하면서 JDK나 JRE를 정확하게 알고 있을까란 의문이 들었고 그래도 내가 자바 개발자라면 꼭 알아야 되는 개념이라고 생각해서 정리를 해봤다. JDK(Java Development Kit) JDK는 자바 애플리케이션을 개발하는 데 사용되는 소프트웨어 개발 환경으로 JDK 또한 하나의 소프트웨어이다. 자바 개발자는 JDK를 통해서 자바 프로그램을 코딩하고 실행할 수 있기 때문에 javac, javadoc 등의 개발 도구들(development tools)이 포함되어 있다. 그림과 같이 JDK는 JRE와 JVM을 포함..
·자바
Optional 클래스 자바 언어로 개발을 하다 보면 항상 조심해야 되는 예외 중에 NullPointer 예외가 있다. 개발하면서 많이 겪는 예외 중에 하나로 왜 null값이 들어올까 항상 고민하게 만드는 예외다. 이러한 문제를 해결해주는 클래스로 Optional 클래스가 있다. Optional 클래스는 T 타입 객체의 래퍼 클래스로 모든 종류의 객체를 저장할 수 있다. Optional 클래스를 사용하는 이유 null을 직접 다루는 것은 NullPointer 예외가 발생할 수 있기 때문에 상당히 위험한 행동이다. 따라서 Optional 클래스를 사용해서 null을 간접적으로 다룰 수 있게 해준다. 매개 변수로 들어오는 값이 null인지를 확인하기 위해서는 if문을 통한 검증이 이뤄져야 하고 이로 인해 코..
·자바
람다(Lambda) 함수를 간단한 식으로 표현하는 방법이다. 람다식은 익명 함수가 아니라 익명 객체이다. 따라서 람다를 다루기 위해서는 참조변수가 필요하기 때문에 참조 변수 타입을 지정해줘야 한다. 람다식 작성하기 메서드의 이름과 반환타입을 제거하고 화살표(->)를 블록 앞에 추가한다. 반환값이 있는 경우, 식이나 값만 적고 return문을 생략한다. (세미콜론도 생략 가능) 매개변수의 타입이 추론 가능하면 생략이 가능하다. (대부분의 경우 생략이 가능함) MyFunction f1 = new MyFunction() { @Override public int max(int a, int b) { return a > b ? a : b; } }; 함수형 인터페이스에 max라는 메서드가 있다고 가정하면 위의 코드와..
·자바
제네릭(Generics) 제네릭은 컴파일 시 타입을 체크해 주는 기능이다. JDK 1.5 이후로는 꼭 타입을 지정해줘야 하는데 이때 제네릭을 사용하여 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄일 수 있다. 타입 변수 클래스를 작성할 때 Object 타입 대신 타입 변수(E)를 선언해서 사용한다. 객체를 생성할 때 타입 변수 대신 실제 타입을 지정한다. 실제 타입이 지정되면 형변환을 생략할 수 있다. 참조 변수와 생성자의 대입된 타입은 일치해야 한다. JDK 1.7부터 생성자에 타입 변수를 지정하는 것을 생략할 수 있다. public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, java.io.Seria..
·자바
컬렉션 프레임워크(Collection Framework) 다수의 객체를 다루기 위한 표준화된 프로그램 방식을 뜻한다. 크게 3가지로 나눌 수 있는데 계층 구조로 보면 다음과 같다. 해당 계층 구조에서 핵심은 List, Set, Map이다. List 순서가 있는 데이터 집합으로 중복을 허용한다. List의 종류로 ArrayList, LinkedList, Stack, Vector 등이 있다. List의 예시로 대표적인 ArrayList를 사용해보자. ArrayList는 말 그대로 Array(배열)의 특징과 List(리스트)의 특징이 혼합된 자료구조를 의미한다. 먼저 ArrayList의 내부를 살펴보면 List 인터페이스를 구현하게 된다. 그 다음으로 살펴볼 것은 ArrayList의 길이는 처음 생성했을 때 ..
·자바
애너테이션(Annotation) 애너테이션은 주석처럼 프로그래밍 언어에 영향을 미치지 않으며 유용한 정보를 제공해 준다. @Override @ 로 시작하고 메타데이터를 프로그램 요소(인스턴스 변수, 생성자, 매서드, 클래스 등)에 연결하는 데 도움을 준다. 예전에는 주석을 XML로 따로 관리를 했다는데 프로그램이 변경되고 버전이 올라감에 따라 주석을 관리하는 XML도 변경해야 되는 번거로움이 존재했다. 이러한 문제를 해결하기 위한 대안으로 나온 것이 현재의 애너테이션이다. 대표적인 애너테이션 몇 개만 살펴보자 @Override 우리가 조상의 메서드를 상속받아 구현할 때 발생할 수 있는 문제로는 철자 문제가 있다. 개발자가 의도한 것은 오버라이딩이었지만 철자가 틀리면 의도와는 다르게 동작할 수 있다. cl..
·자바
내부 클래스(Inner Class) 클래스 내부에 선언된 클래스를 의미한다. 내부 클래스에서 지역 변수를 사용할 때 상수만 접근이 가능한데 그 이유는 메서드가 실행이 종료되었지만 다른 실행 중인 메서드가 해당 지역변수를 접근할 수 있는 문제가 발생할 수 있어 상수만 접근이 가능하다. 상수는 따로 constant pool에서 관리를 하게 되는데 메서드가 종료되어도 상수의 값에 접근할 수 있다. 내부 클래스의 사용 Outer oc = new Outer(); Outer.InstanceInner instanceInner = oc.new InstanceInner(); // 인스턴스 내부 클래스 객체 생성 외부에서 내부 클래스를 사용하기 위해서는 먼저 외부 클래스를 명시해줘야 한다. 그 후 내부 클래스에 접근하여 ..
·자바
예외(Exception)예외라는 것은 에러(Error)와 뜻이 다른데, 먼저 에러는 프로그램 코드에 의해서 수습될 수 없는 심각한 오류가 발생한 것이고 예외는 수습이 가능한 다소 미약한 오류를 뜻한다.프로그램에서 발생하는 에러의 종류를 분류해 보면 3가지로 나눌 수 있다.1. 컴파일 에러: 컴파일 할 때 발생하는 에러를 뜻하며 프로그램이 실행되기 전에 에러를 발생시켜 준다.2. 런타임 에러: 실행할 때 발생하는 에러를 뜻하며 컴파일까지 완료했지만 프로그램을 실행하면 에러가 발생하여 프로그램이 종료된다.3. 논리적 에러: 개발자의 작성 의도와 다르게 동작해서 나타나는 에러를 뜻하며 컴파일 과정을 거쳐 프로그램이 실행되고 난 후 종료되지 않지만 의도하지 않은 값이 나올 때를 말한다. 예외 처리예외 처리란 앞..
·자바
열거형(Enum, Enumeration) 열거형(Enum)은 서로 관련된 상수들을 같이 묶어 놓은 것을 의미한다. Java에서 열거형은 클래스의 유형이다. 클래스와 마찬가지로 생성자를 제공하고, 인스턴스 변수와 메서드를 추가할 수 있고, 인터페이스를 구현할 수도 있다. Java 열거형은 타입 안정성을 제공하여 잘못된 값이 사용되는 것을 방지해 준다. 열거형은 클래스와 비슷하지만 다른 클래스를 상속할 수 없으며 확장될 수 없다. 모든 열거형 상수는 항상 암시적으로 public static final이다. 그러므로 이름을 통해서 접근이 가능하다. 열거형의 주요 목적은 자체 데이터 유형을 정의하는 것이다. Enum 선언 선언은 클래스 외부나 내부에서 수행할 수 있지만 메서드 내부에서는 수행할 수 없다. enu..
Hosae905
'자바' 카테고리의 글 목록