객체

객체를 생성하는 방법에 어떤 것들이 있는지, 각각의 방법에는 어떤 장점과 단점이 있는지 살펴보자. [Effective Kotlin. 33] 생성자 대신 팩토리 함수를 사용하라. 객체 생성 방법 생성자 별도의 함수를 통해 생성 생성자의 역할을 대신 해주는 함수를 팩토리 함수라 부르며, 아래와 같은 장점들이 생김 생성자와 다르게 함수에 이름을 붙일 수 있음 (가독성이 좋아짐) ArrayList(3) : ArrayList.withSize(3) 함수가 원하는 형태의 타입을 리턴할 수 있음 호출될 때마다 새 객체를 만들 필요가 없음 싱글턴 패턴처럼 객체를 하나만 생성하게 강제하거나, 최적화를 위해 캐싱 메커니즘을 사용할 수 있음 아직 존재하지 않는 객체를 리턴할 수 있음 가시성을 원하는 대로 제어할 수 있음 인라..
객체의 책임과 메시지 객체 설계를 더 잘하기 위해 객체를 이해해보자.. 객체는 객체지향 공동체에서 어떤 역할을 하는 것일까..? 자율적인 책임 객체지향 공동체를 구성하는 기본 단위는 ‘자율적'인 객체 자율적인 객체? 스스로 정한 원칙에 따라 판단하고 스스로의 의지를 기반으로 행동하는 객체 객체가 어떤 행동을 하는 유일한 이유는 다른 객체로부터 요청을 수신했기 때문이다. 요청을 처리하기 위해 객체가 수행하는 행동을 책임 이라고 한다. 즉, 자율적인 객체란 스스로의 의지와 판단에 따라 각자 맡은 책임을 수행하는 객체 객체가 자율적이기 위해서는 객체에게 할당되는 책임의 수준 역시 자율적이어야 한다. 상세한 수준의 책임들은 자율성을 제한한다. 즉 요청하는 객체에 의존할 수 밖에 없다. 증언해라 vs 목격..
더 뛰어난 객체 설계를 하기 위해 역할 / 책임 / 협력에 대해 정리한다. 객체지향 설계의 전체적인 품질을 결정하는 것은 개별 객체의 품질이 아니라 여러 객체들이 모여 이뤄내는 협력의 품질이다. 훌륭한 객체지향 설계자는 객체들 간의 요청과 응답 속에서 창발하는 협력에 초첨을 맞춰 애플리케이션을 설게한다. 협력이 자리를 잡으면 저절로 객체의 행동이 드러나고 뒤이어 적절한 객체의 상태가 결정된다. 협력 협력은 한 사람이 다른 사람에게 도움을 요청할 때 시작된다. 요청을 받은 사람은 일을 처리한 후 요청한 사람에게 필요한 지식이나 서비스를 제공하는 것으로 요청에 응답한다. 다른 사람으로부터 요청을 받은 사람 역시 자신에게 주어진 일을 처리하던 중에 다른 사람의 도움이 필요한 경우가 있다. 결과적으로 협력은 다..
프로그래밍을 하면서 가장 힘든게 객체지향적으로 프로그래밍을 하는 것이다. 메소드를 어디에 위치를 시켜야 맞는 것일까? 객체의 책임은 어디까지 가져가야하는 것일까? 요즘들어 이런 생각들을 자주하게 되면서 코드를 썻다 지웠다하는 것 같다. 혼자 해결이 불가능하여 예전에 읽고 잊어버렸던, 사실은 그 당시에는 잘이해가 안되었던 것 같다. 객체지향의 사실과 오해란 책을 피고 객체에 대해 다시 읽어 보았다. 고민을 하고 읽을 때와 무지성으로 읽었을 때는 확실히 다르더라.. 이 곳에 정리되는 내용은 나중에 객체가 무엇이였지? 라고 생각될 때 기억을 되살리기 위해 작성됬다. 객체 개별적인 실체로 식별 가능한 물리적인 또는 개념적인 사물은 어떤 것이라도 객체가 될 수 있다. 개념적인 사물? - 오늘의 주문내역 혹은 어제..
객체 ⇒ 물리적인 경계를 지닌 구체적인 사물. (추상적인 사물까지도 사람들은 객체로 인식할 수 있다.) ex) 주문, 계좌 이체 물리적인 실체는 존재하지 않더라도 인간이 쉽게 구분하고 하나의 단위로 인지할 수 있는 개념적인 객체의 일종이다. 객체지향 패러다임의 목적 : 현실 세계를 모방하는 것이 아니라 현실 세계를 기반으로 새로운 세계를 창조하는 것 객체, 그리고 소프트웨어 나라 객체의 다양한 특성을 효과적으로 설명하기 위해서는 객체를 상태(state), 행동(behavior), 식별자(identity)를 지닌 실체로 보는 것이 가장 효과적이다. 상태(state) 상태는 특정 시점에 객체가 가지고 있는 정보의 집합으로 객체의 구조적 특징을 표현한다. 객체의 상태는 객체에 존재하는 정적인 프로퍼티와 동적인..
본 내용은 객체지향의 사실과 오해라는 책 내용을 정리한 것이며, 자세한 내용은 책을 참고하시길.. 기능을 구현하기 위해 협력하는 객체들 손님 → 캐시어 → 바리스타 커피를 주문하는 과정은 객체지향의 핵심적이고 중요한 개념을 거의 대부분 포함하고 있다. 사람이라는 단어를 객체 손님, 캐시어, 바리스타 에이전트의 요청을 메시지 손님 → 캐시어 : 주문을 요청 캐시어 → 바리스타 : 커피제조를 요청 요청을 처리하는 방법을 메서드 캐시어 : 주문을 받은 후 바리스타에게 커피제조를 요청한다. 바리스타 : 커피제조를 한다. 역할과 책임을 수행하며 협력하는 객체들 사람들은 커피 주문과 같은 특정한 목표를 이루기 위해 서로 협력한다. 실세계 : 협력의 핵심은 특정한 책임을 수행하는 역할들 간의 연쇄적인 요청과 응답을 ..
객체 => 상태와 행위가 존재함 (개체(entity)와 개체들에 관련된 연산을 제공하는 메서드들의 모음을 나타냄) 원시 타입(primitive type)을 제외하면 자바 언어의 다른 모든 변수들은 참조 타입이다. 객체는 참조 타입이다. 라는 말은 정확히 무엇을 의미하는 것일까? 원시 타입은 int i = 42로 변수가 선언되었을 때, 42라는 값이 메모리에 할당된다. 그러면 프로그램은 나중에 int j = i 라는 형식으로 i에 의해 표현되는 값이 j에 할당되었을 때 메모리의 다른 위치에 같은 값을 할당한다.(일단 할당하고 나면 i는 j의 값에 영향을 미칠 수 없다.) 그렇다면 객체 타입은 어떻게 동작할까 자바에서 new ArrayList(20)같은 구문은 데이터를 저장하는데 필요한 영역을 메모리에 요구..
항상 읽어도 이해하기 힘들 부분이었으나, 이번 기회에 확실히 이해하고 정리를 하게 되었다. Java에서 String을 생성하는 방식은 두가지가 있다. new 연산자를 이용하는 방법 (String str = new String("Hello")); 리터럴을 이용하는 방법 (String str = "Hello"); new 연산자를 통해서 생성하게 되면 String은 Heap영역에 존재하게 된다. 하지만 리터럴을 이용할 경우 string contstant pool이라는 영역에 존재하게 된다. (constoanl pool은 PermGen영역에 존재하게 된다.) 차이점을 살펴보자. @org.junit.Test public void testStringEquality(){ final String literal = "H..
깡냉쓰
'객체' 태그의 글 목록