💡 해당 글은 『자바의 신 3판』을 복습하며 도서의 내용과 본인의 주관적인 생각을 정리한 글입니다. ☁️ 내용정리 객체지향 자바는 객체지향 언어(Object Oriented Language)이다. 객체지향이 뭘까? 객체지향은 자바가 지향하는 프로그래밍 방법론으로 객체 간의 협력을 통해 프로그램이 동작하는 것이 특징이다. 객체란 뭘까? 객체는 상태(state)와 행위(behavior)를 가진다. 상태는 객체가 스스로 관리하는 변수를 의미한다. 행위는 상태를 변경하거나, 다른 객체의 질문에 메시지를 던지는 것을 의미한다. 정리하면 자바는 객체지향 언어이며 객체는 상태와 행위를 가진다. 행위를 통해 상태를 관리하거나 다른 객체와 협력한다. 클래스와 객체 클래스와 객체는 구분되어 사용된다. 클래스는 객체를 생성..
JAVA
💡 해당 글은 『자바의 신 3판』을 복습하며 도서의 내용과 본인의 생각을 정리한 글입니다. ☁️ 내용정리 터미널에서 자바 프로그램 작성하고 실행하기 % java [-options] class [args...] // .class 파일 실행 % java [-options] jar jarfile [args...] // .jar 파일 실행 JAR? Runnable JAR? 터미널에서 JAR파일 생성하기 % vi GodOfJava.java 커맨드에서 java파일을 생성하고 아래와 같이 작성한다. public class GodOfJava { public void main(String[] args) { System.out.println(String.join(", ", args)); } } javac 명령어를 사용하여..
💡 해당 글은 『자바의 신 3판』을 복습하며 도서의 내용과 본인의 생각을 정리한 글입니다. 내가 생각하는 프로그래밍은 “일상생활에서 불편했던 점을 프로그램으로 구현해 해결할 수 있게 하는 것” 이라고 생각한다. ☁️ 내용정리 프로그래밍(Programming)이란? 프로그래밍은 컴퓨터에서 할 일을 가르치는 것이다. - 『자바의 신 3판』 프로그래밍을 한다는 것은 작은 작업을 반복적으로 수행하면서 어떤 기능을 만들어 내는 것이다. 내가 잘 이용하는 노션, 구글과 같은 사이트도 작은 프로그램들이 수백, 수천 개가 수행되면서 기능을 제공한다. 사람과 컴퓨터 사이에 의사소통을 위해 필요한 것이 프로그래밍 언어이다. 클래스(Class), 메서드(Method), 변수(Variable) 클래스는 자바의 가장 작은 단위..
Daemon? 사용자가 직접적으로 제어하지 않고, 백그라운드에서 돌면서 여러 작업을 하는 프로그램을 말한다. 시스템 로그를 남기는 syslogd처럼 보통 데몬을 뜻하는 ‘d’를 이름 끝에 달고 있으며, 일반적으로 프로세스로 실행된다. - wikipedia Daemon Thread 데몬은 백그라운드에서 실행되는 프로그램을 말한다. 데몬 스레드는 백그라운드에서 실행되는 스레드이다. Thread클래스의 setDaemon() 메서드를 통해 설정할 수 있다. public final void setDaemon(boolean on) { checkAccess(); if (isVirtual() && !on) throw new IllegalArgumentException("'false' not legal for virtu..
Java Garbage Collection Basics Java Overview Java is a programming language and computing platform first released by Sun Microsystems in 1995. It is the underlying technology that powers Java programs including utilities, games, and business applications. Java runs on more than 850 mill www.oracle.com 해당 포스팅의 모든 이미지의 출처는 오라클 공식 문서이다. 가비지 컬렉션 (GC: Garbage Collection) Automatic garbage collection ..
GitHub - hyunsb/java-racingcar-6 Contribute to hyunsb/java-racingcar-6 development by creating an account on GitHub. github.com 고민. 비즈니스 로직과 View의 의존성 배제하기 비즈니스 로직을 담당하는 Domain과 입출력을 담당하는 View의 의존관계을 완전히 배제하고 싶었다. 분리를 위해 Domain과 View의 의존관계를 동시에 가지는 Controller를 생성했다. 이렇게 객체를 분리함으로써 로직상의 물리적인 의존관계는 완벽하게 사라졌다. 만약에 화면단에서 표현되는 Car의 진행도를 bar(’-’)가 아닌 다른 문자열로 변경하고 싶다면? 흐름상 코드의 변경은 View에서 이루어지는 게 자연스럽다고..
우아한 테크코스의 프리코스(자동차 경주)를 진행하며 생겼던 고민과 해결방법에 대해 정리하려 한다. GitHub - hyunsb/java-racingcar-6 Contribute to hyunsb/java-racingcar-6 development by creating an account on GitHub. github.com 고민. getter의 활용을 객체 간 대화로 해결하기 변경 전 경주를 진행하는 Car 객체들을 관리하는 Cars 객체이다. 기존의 로직은 현재 가장 멀리 이동한 자동차의 포지션, 선두 자동차를 찾기위해 getter를 사용했다. public class Cars { private final List cars; public List findTopCars() { int topPosition..
정보 은닉을 위해 객체의 멤버를 private로 접근을 제한하고 getter/setter를 이용하여 멤버에 접근하라고 배웠고, 많은 글에서 이렇게 사용하라 말한다. 사실 아 ’그렇구나, 외부에서 필드에 바로 접근을 해버리면 좋지 않구나‘ 하고 넘어갔었다. 이펙티브 자바라는 책을 읽으며 이에 대해 한 번 더 생각해보게 되었다. 접근자 메서드를 왜 사용해야할까? 그저 정보은닉을 지키기 위해? 나는 개발자의 의도 내에서만 필드에 접근할 수 있도록 하기 위해라고 생각한다. 외부에 필드의 직접적인 접근을 제한하고 개발자의 의도 내에서만 접근하면 어떤 점이 좋을까? 멤버의 타입을 바꿀 수 있다. 잉? 그냥 바꾸면 되는 거 아니여? 라는 생각은 아주 큰일 날 생각이다. 우리는 객체를 사용하는 사용자들을 생각해야한다...
핵심 내용 모든 클래스와 멤버는 소프트웨어가 동작하는 한 가장 낮은 접근 권한을 부여하라. 꼭 필요한 것만 골라 최소한의 public API를 설계하자. public 클래스는 상수용 필드 외에는 어떠한 public필드를 가져선 안된다. public static final 필드가 참조하는 객체가 불변인지 확인하라. 📌 여기서 API란 어떤 클래스 혹은 인터페이스에서 제공하는 public 메서드로 다른 해당 클래스 혹은 인터페이스를 사용하는 코드에서 호출할 수 있는 메서드를 의미한다. 클래스와 멤버의 접근 권한을 최소화 하라 잘 설계된 컴포넌트는 클래스 내부 구현 정보를 외부로부터 얼마나 잘 숨겼는지에 판단된다. 자동차를 예로 들어보자. 운전자에게 제공되어야 할 기능(정보)는 자동차를 조작하기 위해 사용될 ..