목록네트워크 캠퍼스/JAVA (20)
Information Security Study

생성자 주입이 좋고 setter를 되도록이면 쓰지 말아야 하는 이유 기본 생성자(빈 객체를 만드는 경우) setter를 이용해서 추가적인 데이터 수정을 허용한다면 모든 필드를 초기화하지 않고 넘어가는 경우가 발생할 수 있다. 따라서 모든 필드를 초기화하도록 생성자 주입을 강요하는 것이 더 좋다. 불완전한 인스턴스의 생성을 억제할 수 있다는것이 바로 생성자 주입의 좋은 점이다. 그래서 외부와의 접점이 있는 클래스를 DTO로 먼저 사용하고 내부적으로는 따로 사용하는 Entity 클래스를 이용하는 것이 좋은 이유다. stream API Collection을 상속받은 구현체에서는 stream API를 사용할 수 있다. .stream().다른메서드() foreach 반복문은 foreach를 이용해 JS의 .map..

Object 클래스 toString() 인스턴스를 콘솔에 찍었을때 찍힐 내용을 적는 메서드 디버깅, 로깅 등에서 인스턴스에 무슨 값이 들어있었나 체크하기 위해서 사용한다. 로그를 남기는 이유는 문제 해결, 알아차리기, 법적 이슈로 남기는 경우가 있다. toString() 예제 package object.tostring; public class SomeObject { private int intField; private String stringField; public SomeObject(int intField, String stringField) { this.intField = intField; this.stringField = stringField; } // 우클릭 source -> generate to..

객체지향 관련 이론 및 문법 객체지향적으로 개발해야 하는 이유 객체지향 프로그래밍은 수십년간의 실무 노하우가 응집되어서 이런식으로 개발해야 한다는 일종의 가이드라인이 잡힌 것이다. 그렇기 때문에 맥락을 모른 채 결론만 접하게 되는 초급 개발자들은 당연히 어려울 수밖에 없다. 그럼에도 불구하고 맥락을 잡으면 다른 기업, 개발자가 이미 많이 사용하기 때문에 의사소통에도 도움이 된다. 개발 과정에서 자주 발생하는 문제를 객체지향 프로그래밍이라는 방법론으로 해결하기 위해서 사용한다. 절차지향 프로그래밍(구조체 활용)에서는 프로그램적으로 다뤄져야 하는 상태와 상태를 변경시키는 함수가 따로 놀기 때문에 연관성을 확인하기 힘들었지만 객체지향 프로그래밍에서는 변수와 함수를 밀접하게 하나의 클래스의 소속으로 만들었기 때..

프로세스와 쓰레드 어플리케이션이란? 하나의 프로그램 단위를 어플리케이션이라고 부른다. 예를들어 우리가 실행하는 모든 프로그램 하나 하나가 어플리케이션이라고 할 수 있다. 프로세스란? 하드디스크에 저장되어있는 하나의 단위 프로그램이 실행되었을 때 메모리에서 해당 프로그램을 실행시키기 시작하고 이것을 프로세스라고 부른다. 위에서는 23 + 6 + 109개의 프로세스가 돌아가고 있다고 볼 수 있다. 각 프로세스는 하나하나가 독립된 코드, 스태틱, 스택, 힙 영역을 가진다. 멀티 프로세스란? 위 사진에서 크롬에는 (8)이 붙어있다. 이렇게 하나의 어플리케이션을 여러 개 실행하면 각각의 어플리케이션이 다중 프로세스를 만든다. 애플리케이션 단위로 멀티태스킹을 할 수 있도록 도와주는 것이 바로 멀티 프로세스라고 할 ..
제네릭(generic) 제네릭이란 클래스나 인터페이스 선언에 유형 매개변수가 들어있는 클래스를 뜻한다. 제네릭 타입은 클래스 또는 인터페이스 이름 뒤에 ""부호가 붙고, 그 사이에 파라미터가 위치한다. 자바 5 버전부터 제네릭이 도입된 이후에는 제네릭 기능으로 인해 클래스에 원하지 않는 데이터형이 들어가는 것을 방지할 수 있고, 반대로 값을 가져올 때도 형 변환을 하지 않게 되었다. 제네릭은 형 안정성(type safety)을 위해 사용한다. 제네릭 내부에서 주소값만 받아올 수 있도록 설계가 되어있기 때문에 안에 기본 타입을 사용할 수 없다. 참조 타입만 가능하다. Collection 자바 프로그램에서 객체를 객체들의 모음 형식으로 관리할 수 있는 방법을 제공하는 클래스들을 컬렉션이라고 부른다. 컬렉션은..

Wrapper 클래스 자바는 기본 타입의 값을 갖는 객체를 생성할 수 있다. 이러한 객체를 포장(Wrapper) 객체라고 하는데 그 이유는 기본 타입의 값을 객체 내부에 두고 포장하기 때문이다. 포장 객체의 특징은 포장하고 있는 기본 타입의 값은 외부에서 변경할 수 없다. 만약 변경하고 싶으면 새로운 포장 객체를 생성해야 한다. 기본 타입의 값을 포장 객체로 만드는 과정을 박싱(Boxing)이라 하며 포장 객체에서 기본 타입의 값을 얻어내는 과정을 언박싱(Unboxing)이라 한다. 포장 클래스의 주요 용도는 기본 타입의 값을 박싱해서 포장 객체로 만드는 것이지만, 문자열을 기본 타입 값으로 변환할 때도 많이 사용한다. 대부분의 포장 클래스는 "parse+기본타입" 명으로 되어있는 정적 메서드를 제공한다..
System 클래스 자바 프로그램은 운영체제상에서 바로 실행되는 것이 아니라 JVM 위에서 실행된다. 따라서 운영체제의 모든 기능을 자바 코드로 직접 접근하기는 어렵다. 하지만 System 클래스를 이용하면 운영체제의 일부 기능을 이용할 수 있다. 프로그램 종료, 키보드로 입력, 모니터로 출력, 메모리 정리, 현재 시간 읽기 등이 가능하다. System 클래스의 모든 멤버는 static으로 구성되어 있어 클래스 이름으로 바로 접근이 가능하다. System 클래스 주요 메서드 exit(): 현재 실행하고 있는 프로세스를 강제 종료시킨다. 정상 종료일경우 매개값으로 0을 주고, 비정상 종료인경우 0 이외에 다른 값을 준다. currentTimeMillis() : 컴퓨터의 시계로부터 현재 시간을 읽어서 밀리세..

예외 강제 발생시키기 사용자가 직접 선언한 예외 클래스나 자바가 제공하는 예외 API에서 예외를 강제 발생시키려면 throw라는 키워드를 이용한다. throw 예제 package exception.throw_; public class ThrowExample { public static int calcSum(int n) throws Exception{ /* * 프로그램이 throw 구문을 만나는 순간 예외를 즉시 발생시키고 * 해당 예외를 처리해줄 catch 블록이 있는지 검색한다. */ if(n