본문 바로가기

공부 기록

(319)
순환(Recursion)의 개념과 기본 예제 1 순환(Recursion) - 자기 자신을 호출하는 함수 void func(...) { ... func(...); ... } - 무한 루프에 빠지지 않게 해야 한다. 예제1 public class Code01 { public static void main(String[] args) { int result = func(4); System.out.print(result); } public static int func(int n) { if (n = n인 두 양의 정수 m과 n에 대해서 m이 n의 배수이면 gcd(m, n) = n이고, 그렇지 않으면 gcd(m, n) = gcd(n, m%n)이다. 더 단순한 버전 public static int gcd(int p, int q) { if (q == 0) return..
[이펙티브 자바 3/E] 아이템12 - toString을 항상 재정의하라 - Object의 기본 toString 메서드가 우리가 작성한 클래스에 적합한 문자열을 반환하는 경우는 거의 없다. 간결하면서 사람이 읽기 쉬운 형태의 유익한 정보를 반환해야 한다. 모든 하위 클래스에서 이 메서드를 재정의해야 한다. - 실전에서 toString은 그 객체가 가진 주요 정보 모두를 반환하는 게 좋다. - 객체가 거대하거나 객체의 상태가 문자열로 표현하기에 적합하지 않다면 요약 정보를 담아야 한다. - 이상적으로는 스스로를 완벽히 설명하는 문자열이어야 한다. - toString을 구현할 때면 반환값의 포맷을 문서화할지 정해야 한다. 포맷을 명시하기로 했다면, 명시한 포맷에 맞는 문자열과 객체를 상호 전환할 수 있는 정적 팩터리나 생성자를 함께 제공해..
[이펙티브 자바 3/E] 아이템11 - equals를 재정의하려거든 hashCode도 재정의하라 equals를 재정의한 클래스 모두에서 hashCode도 재정의해야 한다. equals 비교에 사용되는 정보가 변경되지 않았다면, 애플리케이션이 실행되는 동안 그 객체의 hashCode 메서드는 몇 번을 호출해도 일관되게 항상 같은 값을 반환해야 한다. 단, 애플리케이션을 다시 실행한다면 이 값이 달라져도 상관없다. equals(Object)가 두 객체를 같다고 판단했다면, 두 객체의 hashCode는 똑같은 값을 반환해야 한다. equals(Object)가 두 객체를 다르다고 판단했더라도, 두 객체의 hashCode가 서로 다른 값을 반환할 필요는 없다. 단, 다른 객체에 대해서는 다른 값을 반환해야 해시테이블의 성능이 좋아진다. - equals는 물리적으로 다..
[JPA] 4장 - 엔티티 매핑(2) - 필드와 컬럼 매핑 필드와 컬럼 매핑: 레퍼런스 @Column - name : 필드와 매핑할 테이블의 컬럼 이름 - nullable : null 값의 허용 여부를 설정한다. false로 설정하면 DDL 생성 시에 not null 제약 조건이 붙는다. - unique : 한 컬럼에 유니크 제약 조건을 걸 때 사용한다. (두 컬럼 이상을 걸 때는 @Table.uniqueConstraints를 사용한다.) - columnDefinition : 데이터베이스 컬럼 정보를 직접 줄 수 있다. - length : 문자 길이 제약 조건(String 타입에만 사용) - precision, scale : 아주 큰 숫자나 정밀한 소수를 다루어야 할 때만 사용한다. BigDecimal, BigInteger 타입에서 사용하며, precision은..
[JPA] 4장 - 엔티티 매핑(1) @Entity - JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여야 한다. - @Entity 적용 시 주의사항 - 기본 생성자는 필수다.(파라미터가 없는 public 또는 protected 생성자) - final 클래스, enum, interface, inner 클래스에는 사용할 수 없다. - 저장할 필드에 final을 사용하면 안 된다. @Table - @Table은 엔티티와 매핑할 테이블을 지정한다. 생략하면 매핑한 엔티티 이름을 테이블 이름으로 사용한다. 다양한 매핑 사용 - @Enumerated : enum 매핑 시 사용하는 어노테이션 - @Temporal : 날짜 타입 매핑 시 사용하는 어노테이션 - @Lob : CLOB, BLOB 타입 매핑 시 사용하는 어노테..
Three-tier architecture 애플리케이션을 3개의 논리적 및 물리적 컴퓨팅 계층으로 분리한다. - 각 계층이 자체 인프라에서 실행되기 때문에 별도의 개발팀에 의해 동시 개발이 가능하다. - 다른 계층에 영향을 주지 않고 필요에 따라 업데이트되거나 확장될 수 있다. - 신속성 / 확장성 / 안정성 / 보안성
Stored Function Stored Function 사용자가 정의한 함수 DBMS에 저장되고 사용되는 함수 SQL의 SELECT, INSERT, UPDATE, DELETE statement에서 사용할 수 있다. ⬇️ 임직원의 ID를 열 자리 정수로 랜덤하게 발급하고 싶다면 (맨 앞자리는 1로 고정) delimiter $$ CREATE FUNCTION id_generator() RETURNS int NO SQL BEGIN ㅤㅤㅤㅤRETURN (10000000000 + floor(rand() * 10000000000)); END $$ delimiter ; - BEGIN 구문의 세미콜론에서 CREATE function이 끝났다고 해석될 수 있기 때문에 delimiter를 잠시 다른 것으로 변경해준다. ⬇️ 부서의 ID를 파라미터로 ..
[OS/공룡책] Chapter 2. 운영체제 구조 - 연습 문제 1) 시스템 콜의 목적은 무엇인가? - 시스템 콜은 사용자 수준 프로세스가 운영체제의 서비스를 요청하는 것을 허용한다. 2) 명령 인터프리터의 목적은 무엇인가? 통상 커널에 포함되지 않는 이유는 무엇인가? - 명령 인터프리터는 사용자 또는 명령 파일에서 명령을 읽고, 일반적으로 하나 이상의 시스템 콜로 변환하여 실행한다. 명령 인터프리터는 변경될 수 있으므로 일반적으로 커널의 일부가 아니다. 3) UNIX 시스템에서 새 프로세스를 시작하기 위해 명령 인터프리터나 셸에서 어떤 시스템 콜이 실행되어야 하는가? - 새 프로세스를 시작하기 위해서는 fork() 시스템 콜과 exec() 시스템 콜이 수행되어야 한다. fork() 시스템 콜은 현재 실행 중인 프로세스를 복제하는 반면, exec() 시스템 콜은 호출..