Computer Science61 강한 결합과 느슨한 결합 강한 결합 객체간 의존 관계에서 강한 결합이란, 어떠한 객체가 다른 객체에 강한 의존성을 가지고 있다는 것이다. 이는 구현 클래스(Concrete Class)를 직접 참조하고 있음을 의미한다. public class Person { private Chicken chicken; public Person() { this.chicken = new Chicken(); } public void startEat() { chicken.eat(); } } public class Chicken { public void eat() { System.out.println("치킨을 먹습니다."); } } 위와 같은 코드가 존재할 때, Person 클래스는 Chicken 클래스를 직접 참조하고 있다. 즉, Person 클래스가 .. 2023. 4. 17. Mutable vs Immutable Immutable 객체 자바에서 객체는 기본적으로 heap영역에 할당되고 stack영역에 래퍼런스 값을 갖는 참조 변수들로 접근 가능하다. Immutable 객체란 불변 객체를 말하는 것으로, 이 객체의 값을 heap 영역에서 바꿀 수 없다는 뜻이다. 오직 새 객체를 만들어 래퍼런스 값을 주는 재 할당만이 가능하다. Integer i = 1; i = 3; 위와 같이 우리는 i라는 Integer 타입 변수를 1에서 3으로 변경할 수 있다. 그러나 i가 가리키는 객체의 값이 1에서 3으로 변경된 것이아니라 실제로는 3의 값을 가지는 새로운 객체를 생성하고 이 객체를 가리키도록 i의 참조값을 변경한 것이다. 기존 1로 할당되어 있던 객체는 Garbage로 남아있다가 GC(Garbage collection)에 .. 2023. 4. 17. 자바에서의 예외 처리 자바에서 에러, 예외와 관련 된 클래스의 계층구조는 위와 같다. 자바는 실행 시 (runtime) 발생할 수 있는 프로그램 오류를 에러(error)와 예외(exception)으로 구분한다. 에러와 예외가 어떻게 구분되는 지를 먼저 확인 해 보면, 예외는 입력 값에 대한 처리가 불가능하거나, 프로그램 실행 중에 참조된 값이 잘못된 경우 등 정상적인 프로그램의 흐름과 다르게 어긋나게 동작하는 것을 말한다. 이러한 예외는 개발자가 직접 처리할 수 있기 때문에 예외 상황을 미리 예측하여 핸들링한다. 그와 다르게 에러는 시스템 자체에 무엇인가 비정상적인 상황이 생긴 경우에 사용된다. 주로 자바 가상머신에서 발생 되며 예외와 다르게 애플리케이션 코드에서 잡을 수 없다. 예시로는 OutOfMemoryError, Th.. 2023. 4. 16. Garbage Collection Garbage Collection 가비지 컬렉션(Garbage Collection, 이하 GC)은 자바의 메모리 관리 방법 중의 하나로 JVM(자바 가상 머신)의 Heap 영역에서 동적으로 할당했던 메모리 중 필요 없게 된 메모리 객체(garbage)를 모아 주기적으로 제거하는 프로세스를 말한다. Java에서는 가비지 컬렉터가 메모리 관리를 대행해주기 때문에 Java 프로세스가 한정된 메모리를 효율적으로 사용할수 있게 하고, 개발자 입장에서 메모리 관리, 메모리 누수(Memory Leak) 문제에서 대해 관리하지 않아도 되어 오롯이 개발에만 집중할 수 있다는 장점이 있다. 그러나 메모리가 언제 해제되는지 정확하게 알 수 없어 제어하기 힘들며, 가비지 컬렉션(GC)이 동작하는 동안에는 다른 동작을 멈추기 .. 2023. 4. 10. JVM의 구조와 JAVA의 실행방식 JVM이란 JVM은 자바 가상 머신의 약자로, 자바 프로그램 실행환경을 만들어주는 소프트웨어이며, 메모리 관리(GC)를 수행하는 스택 기반의 가상머신이다. JVM의 역할은 다음과 같다. 자바 애플리케이션을 클래스 로더를 통해 읽어 자바 API와 함께 실행할 수 있도록 한다. 자바와 운영체제 사이에서 중개자 역할을 수행하여 자바가 운영체제에 구애 받지 않고 프로그램을 실행할 수 있도록 도와준다. 이 때 Java는 JVM을 통해 플랫폼에 종속적이지 않지만, JVM은은 플랫폼에 의존적이라서 각 플랫폼에 맞는 JVM이 존재한다. JVM의 구조 Class Loader JVM 내로 클래스 파일(*.class)을 동적으로 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈이다. 즉, 로드된 바이트 코드(.class.. 2023. 4. 10. 제네릭 자바에서 제네릭(generic)이란 데이터의 타입(data type)을 일반화한다(generalize)는 것을 의미한다. 한마디로 특정(Specific) 타입을 미리 지정해주는 것이 아닌 필요에 의해 지정할 수 있도록 하는 일반(Generic) 타입이라는 것이다. 어떤 자료구조를 만들어 배포하려고 할 때 String 타입도 지원하고싶고 Integer타입도 지원하고 싶고 많은 타입을 지원하고 싶다. 그러면 String에 대한 클래스, Integer에 대한 클래스 등 하나하나 타입에 따라 만들 것인가? 이러한 문제를 해결하기 위해 우리는 제네릭이라는 것을 사용한다. ArrayList list1 = new ArrayList(); ArrayList list2 = new ArrayList(); LinkedList.. 2023. 4. 10. 이전 1 2 3 4 5 6 ··· 11 다음