본문 바로가기

Java

(15)
[Java] 디자인패턴 - 싱글톤 패턴, 템플릿 메소드 패턴, 팩토리 메소드 패턴 싱글톤 패턴 인스턴스가 오직 1개만 생성되는 패턴을 의미한다. public class Singleton { private static Singleton instance = new Singleton(); private Singleton() { // 생성자는 외부에서 호출 못하게 private 으로 지정해야 한다. } public static Singleton getInstance() { return instance; } public void say() { System.out.println("hi, there"); } } 싱글톤 패턴 사용하는 이유 메모리 측면 -> 한번의 new 연산자를 통해서 고정된 메모리 영역을 사용하기 때문에 추후 해당 객체에 접근할 때 메모리 낭비 방지 데이터 공유가 쉽다. -> 싱..
[Java] 상속 상속 부모클래스의 멤버를 자식 클래스에게 물려줌. 잘 개발된 클래스를 재사용하여, 새 기능을 추가하거나 재정의. 부모클래스의 모든 것을 물려받는 것은 아니다. 부모 클래스에서 private 접근 제한을 갖는 필드/메소드는 상속 대상에서 제외된다. 💡 상속을 쓰는 이유? 코드를 재사용하기 때문에 중복 코드를 방지하여 코드가 간결해지고, 부모 클래스의 수정으로 자식 클래스들도 수정되는 효과가 있기에 유지 보수 효율을 높인다. 💡 자바에서 다중 상속이 안 되는 이유 예를 들어, 상속받은 여러개의 부모 클래스들에서 동일한 이름의 필드나 메소드가 있다면? mother과 father라는 부모 클래스가 있고, 부모 클래스마다 각각 love()라는 메소드가 있다고 하자. 자식 클래스가 love()라는 메소드를 오버라이..
[Java] 열거 타입(Enum) Enum 프로그래밍을 하다보면 한정된 데이터들을 가지는 경우가 많다. 대표적으로 요일은 월,화,수,목,금,토,일 이렇게 있고, 계절은 봄,여름,가을,겨울로 한정되어 있다. 이처럼 한정된 개수의 값들을 가질 경우 하나로 묶어서 열거 타입으로 사용하면 좋다. 상속이나 인스턴스를 생성할 수 없으며, enum은 값은 상수로 구성되어 있기 때문에 변경될 수 없다. 생성자를 가질 수는 있으나, 단 생성자는 private 해야 한다. enum의 생성자는 내부에서만 호출 가능하다. public enum Gender { MALE("XY"), FEMALE("XX"); private String chromosome; private Gender(String chromosome) { this.choromosome = choro..
[Java] 추상클래스와 인터페이스의 공통점/차이점 https://ldyble.tistory.com/13 [Java] 추상 클래스 추상 클래스(Abstract Class)란? 객체 간의 공통적 특성을 추출한 클래스. 예를 들어 강아지, 고양이, 사자라는 객체가 있다고 해보자. 이 3가지 객체는 동물이라는 공통점이 있다. 여기서 동물은 구 ldyble.tistory.com https://ldyble.tistory.com/9 [Java] 인터페이스 인터페이스란? 구현체 클래스들이 필수로 구현해야 하는 추상 자료형이다. 즉, 객체의 사용 방법을 가이드라인한 것이라고 할 수 있다. 상수와 추상 메소드로만 이루어져 있고, 구현된 코드가 ldyble.tistory.com 추상 클래스와 인터페이스의 공통점 둘 다 new를 통해 객체를 생성할 수 없다. 오직 자식만이 ..
[Java] 추상 클래스 추상 클래스(Abstract Class)란? 객체 간의 공통적 특성을 추출한 클래스. 예를 들어 강아지, 고양이, 사자라는 객체가 있다고 해보자. 이 3가지 객체는 동물이라는 공통점이 있다. 여기서 동물은 구체적인 실체라기보다 "나이", "짖기"와 같은 필드와 메소드를 가지고 있는 모든 동물 객체들의 공통되는 특성을 가지고 있는 추상적인 클래스이다. new 연산자를 통해 직접 객체를 만들지는 못하고, 추상 클래스에서 껍데기만 생성하고 상속하는 자식 클래스에서 필수로 오버라이딩하여 사용한다. 💡 추상 클래스는 무조건 추상 메소드가 하나 이상 있어야 하나? 아니다. 추상 클래스는 추상 메소드를 가지지 않아도 된다. 하지만, 추상 메소드를 하나라도 가지는 클래스는 반드시 추상 클래스가 되어야 한다. 추상 클래..
[Java] static의 의미와 사용법 정적(Static)이란? static이란 "고정된"이란 의미를 갖고 있다. 객체를 생성하지 않고도 변수나 함수를 사용할 수 있다. static이라는 키워드로 정적 필드와 정적 메소드를 만들 수 있는데, 이 둘을 합쳐 정적 멤버(클래스 멤버)라고 한다. 정적 멤버는 객체(인스턴스)에 속한 멤버가 아니라 클래스에 고정된 멤버다. 그렇기에 클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에 적재할 때, 클래스 별로 관리된다. 따라서 클래스 로딩이 끝나는 즉시 바로 사용할 수 있다. 정적(Static) 멤버 생성 static 키워드를 통해 생성된 정적 멤버들은 프로그램이 시작되면 Heap 영역이 아니라 Static 영역에 할당된다. static 영역에 할당된 메모리는 모든 객체가 공유하여 하나의 멤버를 어디서..
[Java] this People 클래스에 age필드와 setAge()라는 메소드가 선언되었다고 가정해보자. public class People { // 필드 private int age; // 메소드 void setAge(int a) { age = a; } } 위와 같이, age에 외부의 값을 입력받을 수 있는 setAge()라는 setter함수를 선언하였다. 위에서는 메소드의 인자 이름을 int a라고 했는데, 인자값 변수 이름을 필드의 이름과 같이 하려면 어떻게 해야할까? this를 사용하면, 메소드의 인자/변수와 필드가 같은 이름이라도 그것들을 구분하여 사용할 수 있다. this는 주로 생성자/메소드의 매개변수 이름 = 필드 이름 동일할 경우, 인스턴스 멤버인 필드임을 명시하고자 사용된다. public class Pe..
[Java] 스레드 개념, 실행 방법 프로세스 운영체제로부터 메모리를 할당받아 실행중인 프로그램 스레드 하나의 프로세스 내부에서 독립적으로 실행되는 하나의 작업 단위. 프로세스에는 주로 한개 이상의 스레드 존재 main() 이외의 또 다른 스레드를 만들려면 Tread 클래스를 상속하거나 Runnable 인터페이스를 구현해야 한다. 스레드는 프로세스의 heap, static, code 영역을 공유한다. (stack을 제외한 메모리 영역 공유) 멀티 프로세스 하나의 응용 프로그램을 여러 개의 프로세스로 구성 멀티 스레드 하나의 응용 프로그램을 여러 스레드로 구성하는 방식. 자바를 실행하면 1개의 메인(main) 스레드에 의해 프로그램이 실행되는데, 하지만 1개의 스레드만으로는 동시 작업을 할 수 없다. 동시에 여러 작업을 처리하기 위해서 별도의..