Writing

작업 노트

기술 자체보다 어떤 문제를 왜 그렇게 풀었는지에 초점을 둡니다.

최범균 OOP

최범균 OOP 비용 개발에서 비용은 고려대상이다. 작은 비용으로 변경이 가능해야 된다. 객체 절차 지향 vs 객체 지향 절차 지향 데이터를 공유하는 모델(비용을 올리는 경우가 많다.) 객체 지향 테이터와 프로시저를 따로 분리 객체란 객체의 핵심 기능제공 객체는 제공하는 기능으로 정의 내부적으로 어떤 데이터를 가졌느냐로 정

7 min read

자바트러블슈팅-스레드 진단하기(3)

스레드 진단하기 스레드 단면 잘라 놓기 스레드 단면을 분석하면 매우 빨리 원인을 찾을수 있다. 모든 시스템이 응답이 없을 때(시스템에 행이 걸렸을 경우) 사용자 수가 많지도 않은데, 시스템 cpu 사용량이 떨어지지 않을때 특정 애플리케이션을 수행했는데 전혀 응답이 없을때 기타 여러 가지 상황에서 시스템이 내 마음대로 작동

11 min read

자바트러블슈팅-스레드 진단하기(2)

스레드 진단하기 록 경합을 피하는 10+1가지 방법 코드가 아닌 데이터를 보호 하라. 가장 간단하고 빠른 방법은 전체 함수 호출에 synchronized를 거는 것이다. 하지만 데이터 만 synchronized 블록으로 감싼다면 중요한 코드를 잠그는데 드는 시간을 줄일수 있을 것이다. 록 사용 부분에서는 비싼 계산을 하지

2 min read

자바트러블슈팅-스레드 진단하기(1)

스레드 진단하기 스레드에서 발생하는 문제 중 가장 대표적인것 레이스 컨디션(race condition) 멀티 스레드 환경에서 하나이상의 공유데이터를 처리 할때 아무런 록처리를 하지 않을 경우 동시에 여러 스레드에서 데이터를 수정할수있다. 이런 상황에서 데이터가 꼬여서 무한대기하거나 무한 루프에 빠질수 있는데 이런 상황을

2 min read

켄트백의 구현패턴-발전하는 프레임워크(2)

발전하는 프레임워크 호환성을 유지하는 업그레이드 객체 추상화 구현 스타일을 사용하려면 추상화된 개념은 인터페이스로 전달해야 하는지 상위클래스로 전달해야하는지 결정해야한다. 인터페이스 인터페이스를 클라이언트에게 제공할때의 이점은 세부사항을 가급적 적게 드러낸다는 것이다. 단점은 인터페이스가 수정이 되면 구현하지 않는 경우

5 min read

켄트백의 구현패턴-발전하는 프레임워크(1)

발전하는 프레임워크 코드를 이해하고 커뮤니케이션하는 데 드는 비용에 비해 코드를 수정에 드는 비용이 훨씬 저렴하다고 가정했다. 애플리케이션 수정 없이 프레임워크 수정하기 프레임워크를 지속적으로 발전시켜야 하지만 기존 클라이언트 코드는 계속해서 동작하도록 해야한다는것 프레임워크 개발의 경제성을 향상시키려면 호환성이 유지되지

5 min read

켄트백의 구현패턴-컬렉션(2)

컬렉션 구현 구현 클래스를 구현을 선택할때 요소 성능 컬렉션의 크기 Collection Collection 인터페이스에 기본 구현 클래스는 ArrayList 이다. ArrayList의 성능상 문제가 될만한 부분은 contains와 이 메소드를 이용하는 다른 메소드들이 있다. 성능이 문제가 된다면 HashSet으로 바꾸는것

3 min read

켄트백의 구현패턴-컬렉션(1)

컬렉션 컬렉션의 개념은 여러가지 메타포를 혼합한 것이다. 과거 컬렉션과 유사한 행위는 자료구조 자체에 링크를 넣는 방식으로 구현 컬렉션은 프로그래밍에 있어 가장 근본적인 변형인 몇 개의 데이터를 사용하느냐를 표현한다는 점에서 중요하다. 로직의 변경은 조건문이나 다형성 메시지를 통해 표현할수 있다. 하지만 데이터 갯수의 변

7 min read

켄트백의 구현패턴-메소드(4)

메소드 컬렉션 접근자 메소드 컬렉션에 대한 접근을 어떻게 제공할꺼냐? 간단한 방법은 getter 메소드를 제공해주는것인데 반환 하기전에 수정할수 없는 컬렉션으로 반환 하는것이다. 만약 하나씩 접근한다면 순차열람자를 반환하는 메소드를 제공해라 불린 설정 메소드 불린 살태를 설정하는 가장 좋은 프로토콜은 설정 메소드를 사용하

3 min read

켄트백의 구현패턴-메소드(3)

메소드 오버라이드 오버라이드를 사용하면 변형 메소드를 명확하게 표현할 수 있다 상위 클래스에서 메소드를 abstract로 선언 했다면 이는 하위클래스에서 연산을 특화하라는 뜻이다. super.method() 이런식에 호출을 해서 사용할수있지만 하위 클래스의 같은 이름에 메소드에서만 사용하는 것이 좋다. 제어의 흐름을 재구

8 min read