Language 4

[JAVA] 정적 변수와 메소드 (static)

static 키워드 JAVA에서 static 키워드는 메모리에 한 번 할당된 후, 프로그램 종료 시점까지 해제되지 않음을 의미한다. static 키워드가 붙은 변수나 메소드는 각 객체(인스턴스)에 속하지 않고, 클래스 자체에 고정된다. 이러한 필드나 메소드를 통틀어 정적 멤버라 한다. 즉, 정적 멤버들은 위 그림에서 static 영역에 할당되어, 모든 객체가 공유해 어디서든 참조할 수 있다는 특징을 갖는다. 하지만 static 영역은 Garbage Collector의 관리 영역에 포함되지 않기 때문에, 프로그램 종료 시까지 메모리가 할당된 상태로 유지된다. 따라서 무분별한 사용은 좋지 않다. ※ Garbage Collector : 메모리 관리 기법 중 하나로, 프로그램이 동적으로 할당한 메모리 영역 중 ..

Language/JAVA 2021.03.25

[JAVA] 인터페이스와 추상 클래스 (Interface, Abstract Class)

인터페이스 (Interface) 인터페이스(Interface)란, 추상 메소드(Abstract Method)만으로 이루어진 클래스이다. 추상 메소드는 구현 내용 없이 선언만 해 놓는 형태로 정의된다. 즉, 인터페이스 내의 모든 메소드는 선언만 되어 있을 뿐, 그 내용은 없다. public interface Car{ //인터페이스 내의 변수는 반드시 static final로 지정한다. public static final int variable = 10; //인터페이스 내에서 지정한 메소드는 //반드시 이 인터페이스를 구현하는 클래스가 구현해야 한다. //즉, 클래스에게 특정 메소드들을 구현하도록 강제할 수 있다. public void Ride(); public void RideReverse(); publi..

Language/JAVA 2021.03.20

SOLID : 좋은 객체 지향 설계의 5원칙

단일 책임 원칙 (SRP, Single Responsibility Principle) 하나의 클래스는 하나의 책임만 가져야 하며, 클래스는 이러한 책임을 캡슐화 하여야 한다. 이는 곧 클래스가 변경될 때, 그 이유는 단 한 가지여야만 한다는 말과 같다. 즉, 변경이 발생할 때 파급 효과가 적을수록 좋은 객체 지향 설계이다. class BookReader{ public String ReadBook(Book book); public void EditBook(Book book, int line, ...); } 위와 같은 클래스는 SRP를 만족하지 못한다. 왜일까? 현재 BookReader 클래스는 두 개의 책임을 가진다. Book 객체를 읽는 것(Read)과, Book 객체를 편집(Edit)하는 것이다. 만약..

Language/JAVA 2021.03.10

다형성 (Polymorphism)

스피커를 하나 구매하려는 상황을 가정해 보자. 우리가 고를 수 있는 제품은 A, B, C사에서 제조된 제품들이다. 우리는 어떤 제품을 사더라도, 음악을 재생할 수 있는 기능만 있다면 목표는 달성할 수 있다. 더 좋은 음질, 더 다양한 기능을 가진 제품을 구매할 수도 있지만, 아무튼 어떤 스피커를 사더라도 "음악을 듣는다" 라는 목표는 달성할 수 있을 것이다. 그런데, 우리가 스피커로 음악을 듣기 위해 스피커가 어떤 원리로 음악을 재생하는지 알 필요가 있을까? 물론 없다. 우리는 그저 스피커에서 나오는 음악을 듣기만 하면 된다. 우리가 구매했던 스피커에 음성 인식 기술이 새로 업데이트되었다! 만약 스피커에 어떤 부가적인 기능이 추가되거나 삭제되어도, "스피커로 음악을 듣는다" 라는 우리의 원래 목표는 변함..

Language/JAVA 2021.03.09