본문으로 바로가기

KTKO 개발 블로그와 여행 일기

현재위치 :: HOME BLOG CATEGORY SEARCH ARCHIVE TAGS MEDIA LOCATION GUESTBOOK

네비게이션

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록
관리자
  • 블로그 이미지
    ktko

    개발을 직업으로 삼고, 여행을 좋아하는 남자의 블로그

    링크추가
  • 글쓰기
  • 환경설정
  • 로그인
  • 로그아웃

Effective Java#15 변경 가능성을 최소화 하라

변경 불가능 클래스는 그 객체를 수정할 수 없는 클래스다. 객체 내부의 정보는 객체가 생성될 때 주어진 것이며, 객체가 살아 있는 동안 그대로 보존된다. 자바 플랫폼 라이브러리에는 이런 클래스가 많다. String, 기본 자료형 클래스, Biginteger, BigDecimal 등이 그런 클래스다. 변경 불가능 클래스를 만드는 이유는 다양하다. 우선 변경 불가능 클래스는 변경 가능 클래스보다 설계하기 쉽고, 구현하기 쉽고, 오류 가능성이 적고 더 안전하다. 변경 불가능 클래스를 만들 때 5가지 아래 규칙 1. 객체 생태를 변경하는 메서드(수정자 및 setter)를 제공하지 않는다.2. 계승할 수 없도록 한다. 잘못 작성되거나 악의적인 하위 클래스가 객체 상태가 변경된 것처럼 동작해서 변경 불가능성을 깨뜨..

Effective Java/3장 클래스와 인터페이스 2018. 11. 24. 23:30

Effective Java#14 public 클래스 안에는 public 필드를 두지 말고 접근자 메서드를 사용하라

필드를 모으는 것 말고 아무 기능이 없는 클래스를 만들 때가 있다. 1234class Poing { public double x; public double y;} 이런 클래스는 데이터 필드를 직접 조작할 수 있어서 캡슐화의 이점을 누릴 수가 없다. API를 변경하지 않고서는 내부 표현을 변경할 수 없고, 불편식도 강제할 수 없고, 필드를 사용하는 순간에 어떤 동작이 실행되도록 만들 수도 없다. 객체 지향 개념에 충실하고자 하는 프로그래머에게 이런 클래스는 저주와 같다. private 필드와 public 접근자 메서드getter, setter이 있어야 하고, 변경 가능 클래스라면 생성자와 getter, setter도 제공해야 한다. 선언된 패키지 밖에서도 사용 가능한 클래스에는 접근자 메서드를 제공해야한다..

Effective Java/3장 클래스와 인터페이스 2018. 11. 24. 22:30

Effective Java #7 종료자 사용을 피하라

종료자는 예측 불가능하며, 대체로 위험하고 일반적으로 불필요하다. 종료자를 사용하면 시스템 오류, 성능 문제, 이식성 문제가 발생할 수 있다. 종료자의 단점은 즉시 실행되리라는 보장이 전혀 없다는 것이다. 어떤 객체에 대한 모든 참조가 사라지고 나서 종료자가 실행되기까지는 긴 시간이 걸릴 수도 있다. 따라서 긴급한 작업을 종료자 안에서 처리하면 안된다. 예를 들어 종료자 안에 파일을 닫도록 하면 치명적이다. 종료자 실행 시점은 GC 알고리즘에 좌우되는데, 이 알고리즘은 JVM 마다 크게 다르다. 자바 명세에는 종료자가 즉시 실행되어야 한다는 문구도 없지만, 종료자가 결국에는 반드시실행되어야 한다는 문구도 없다. 따라서 종료자가실행되지 않은 객체가 남은 상태로 프로그램이 끝나게 되는 일도 충분히 가능하다...

Effective Java/1장 객체의 생성과 삭제 2018. 11. 24. 21:30

Effective Java#13 클래스와 멤버의 접근 권한은 최소화 하라

잘 설계된 모듈과 그렇지 못한 모듈을 구별 짓는 가장 중요한 속성 하나는 구현 세부사항을 다른 모듈에 잘 감추느냐의 여부다. 잘 설계된 모듈은 구현 세부사항을 전부 API 뒤쪽에 감춘다. 모듈들은 이 API를 통해서만 서로 통신하며, 각자 내부적으로 무슨 짓을 하는지는 신경쓰지 않는다. 이 개념은 정보은닉 또는 캡슐화라고 하며 잘 알려진 설계 원칙이다. 각 클래스와 멤버는 가능한 한 접근 불가능하도록 만들라. 다시 말해서 개발 중인 소프트웨어의 정상적인 동작을 보증하는 한도 내에서 가장 낮은 접근 권한을 설정하라 ● 최상위 레벨 클래스와 인터페이스에 부여할 수 있는 접근 권한은 package-private와 public 두가지이다. ● 최상위 레벨 클래스너 인터페이스는 가능한 package-private..

Effective Java/3장 클래스와 인터페이스 2018. 11. 24. 21:18

자바 synchronized에 대하여

자바에서 프로그래밍을 한다면 Multi-Thread로 인하여 동기화를 제어해야하는 경우가 생긴다. 그 때 자바에서 제공하는 키워드인 synchronized 키워드를 사용하게 되는데, Multi-Thread 상태에서 동일한 자원을 동시에 접근하게 되었을 때 동시 접근을 막게 된다. 즉 공유 데이터에 lock을 걸어서 먼저 작업 중이던 쓰레드가 작업을 완전히 끝낼 때까지는 다른 쓰레드에게 제어권이 넘어가더라도 데이터가 변경되지 않도록 보호함으로써 쓰레드의 동기화를 가능하게 한다. synchronized 외에 volatile을 사용할 수 있고, Atomic 클래스를 사용할 수도 있지만 이번 포스팅에서는 synchronized를 이용한 사용법 그리고 예제를 포스팅해본다. synchronized를 사용하는 방법은..

Java 개발 이야기 2018. 11. 24. 20:20

자바 쓰레드(Thread)에 대하여

먼저 쓰레드 프로그래밍에 대해서 먼저 알아야할 용어가 있다. TASK 일 혹은 작업이라고 하며, 프로세스와 스레드까지 의미한다. 테스크는 우리가 쉽게 저바할 수 있는 익스플로러, 워드프로세서와 같은 큰프로그램부터, 계산기 덧겜과 같이 작은 연산 작업까지 포함하는 개념이다. 프로세스(Process) OS로부터 자원을 할당 받아 동작하는 독립된 프로그램을 의미한다. 즉 익스플로러를 종료한다고 해서 워드 프로세서가 종료되지 않는다. 특정 프로그램을 실행하면 OS에서는 리소스라고 부르는 자원을 할당 받는다. 이 때 리소스는 CPU나 메모리 등을 의미한다. 이를 자바와 연계하면 자바 명령어를 실행하면 JVM은 OS 로부터 리소스를 할당 받아 실해된다. 실행된 JVM이 하나의 프로세스이다. 한 가지 주의할 점은 같..

Java 개발 이야기 2018. 11. 24. 20:05

[스프링/Spring] JUnit Test

JUnit은 단위 테스트 도구이다. 기존에 System.out.println()으로 하나하나 로그를 찍거나, Debug를 하지 않아도 JUnit Test Case를 작성하여 쉽게 단위 테스트를 할 수 있다. Junit은 플러그인 형태로 Eclipse에 포함되어 있고, Spring에서는 pom.xml에 의존성을 추가하여 쉽게 단위 테스트를 시행할 수 있다. JUnit은 보이지 않고 숨겨진 단위테스트를 끌어내어 졍형화시켜 단위테스트를 쉽게 해주는 테스트용 FrameWork이다. JUnit의 특징 1. 단위테스트 Framework이다.2. 문자 혹은 GUI 기반으로 실행된다.3. 어노테이션으로 간결하게 사용할 수 있다.4. 결과는 성공(녹색), 실패(붉은색) 둘 중에 하나로 표시된다.5. 단정문으로 테스트 케..

Spring 스프링 2018. 11. 23. 12:50
  • 이전
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • ···
  • 44
  • 다음

사이드바

NOTICE

  • 전체 보기
MORE+

CATEGORY

  • 분류 전체보기 (308)
    • 일기 (0)
    • 코드 예제 모음 (1)
      • [JAVA] 웹 크롤링 하기 (1)
    • HTML (1)
    • Java 개발 이야기 (33)
    • Spring 스프링 (16)
    • 자바 디자인 패턴 (13)
    • Effective Java (24)
      • 1장 객체의 생성과 삭제 (7)
      • 3장 클래스와 인터페이스 (3)
      • 7장 메서드 (6)
      • 8장 일반적인 프로그래밍 원칙들 (8)
    • Kotlin 코틀린 (10)
    • JavaScript (24)
    • vue.js (0)
    • node.js (2)
    • jQuery (10)
    • Ajax&JSON (7)
    • Android (12)
    • 알고리즘 및 자료구조 (94)
      • 자바로 만드는 자료구조 (4)
      • 정렬 (3)
      • 탐색 (3)
      • 이론 (2)
      • 문제 (82)
    • 보안 (3)
    • IT인터뷰면접질문 (6)
    • 정규표현식 (2)
    • Unix (2)
    • IT이것저것 (20)
    • 맛집 (4)
    • 여행 (10)
      • 호주 (4)
      • 일본 (6)
    • 블로그 TIPS (6)
    • 영어 공부 (8)
      • 영어 문법 (8)
      • 영어 단어 (0)

RECENTLY

  • 최근 글
  • 최근 댓글

최근 글

최근댓글

Trackback

TAG

  • 알고리즘 문제
  • 자바 SOLID
  • GoF
  • 백준 알고리즘
  • 자바스크립트
  • 백준알고리즘
  • 자바
  • Effective Java
  • 코틀린
  • 백준
  • 알고리즘
  • 이펙티브 자바
  • jquery
  • 디자인 패턴
  • 객체지향 solid
MORE+

ARCHIVE

CALENDAR

«   2025/05   »
일 월 화 수 목 금 토
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

LINK

VISITOR

오늘
어제
전체
  • 홈으로
  • 방명록
  • 로그인
  • 로그아웃
  • 맨위로
SKIN BY COPYCATZ COPYRIGHT KTKO 개발 블로그와 여행 일기, ALL RIGHT RESERVED.
KTKO 개발 블로그와 여행 일기
블로그 이미지 ktko 님의 블로그
MENU
  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록
CATEGORY
  • 분류 전체보기 (308)
    • 일기 (0)
    • 코드 예제 모음 (1)
      • [JAVA] 웹 크롤링 하기 (1)
    • HTML (1)
    • Java 개발 이야기 (33)
    • Spring 스프링 (16)
    • 자바 디자인 패턴 (13)
    • Effective Java (24)
      • 1장 객체의 생성과 삭제 (7)
      • 3장 클래스와 인터페이스 (3)
      • 7장 메서드 (6)
      • 8장 일반적인 프로그래밍 원칙들 (8)
    • Kotlin 코틀린 (10)
    • JavaScript (24)
    • vue.js (0)
    • node.js (2)
    • jQuery (10)
    • Ajax&JSON (7)
    • Android (12)
    • 알고리즘 및 자료구조 (94)
      • 자바로 만드는 자료구조 (4)
      • 정렬 (3)
      • 탐색 (3)
      • 이론 (2)
      • 문제 (82)
    • 보안 (3)
    • IT인터뷰면접질문 (6)
    • 정규표현식 (2)
    • Unix (2)
    • IT이것저것 (20)
    • 맛집 (4)
    • 여행 (10)
      • 호주 (4)
      • 일본 (6)
    • 블로그 TIPS (6)
    • 영어 공부 (8)
      • 영어 문법 (8)
      • 영어 단어 (0)
VISITOR 오늘 / 전체
  • 글쓰기
  • 환경설정
  • 로그인
  • 로그아웃
  • 취소

검색

티스토리툴바