본문 바로가기

객체11

이펙티브 자바 - 불필요한 객체 생성 - 이 글은 Effective Java 를 기반으로 작성되었습니다. - 불필요한 객체 생성 기능이 동일한 객체가 있다면 새로 생성하지 않고 재사용을 하는 편이 좋다. 특히 변경 불가능한 immutable 객체의 경우 값을 변경하지 않기 때문에 언제나 재사용이 가능하다. String test1 = "test1"; String test2 = "test1"; String test3 = new String("test1"); String test4 = new String("test1"); 위의 코드에서 모두 같은 test1 이라는 문자열을 생성하지만 test1 과 test2 는 리터럴 형식으로, test3 과 test4 는 new 를 이용해서 String 객체를 생성했다. test1 과 test2 는 JVM 내에.. 2021. 9. 18.
객체지향의 사실과 오해 - 인터페이스 - 이 글은 조영호의 객체지향의 사실과 오해를 기반으로 작성되었습니다. (가능하면 꼭 읽어보는것을 추천드립니다.) - 인터페이스 인터페이스에는 3 가지 특징이있다. 우선 사용법만 익히면 내부 구조나 동작방식을 몰라도 된다. 또한 내부 구조나 동작방식을 바꾸더라도 사용자에게 영향을 미치지 않는다. 그리고 인터페이스를 변경하지 않으면 사용자와 의사소통에 전혀 문제가 없다는것이다. 앞에서 우리는 메시지의 중요성을 재차 강조했었다. 객체가 다른 객체와 상호작용할 수 있는 유일한 방법은 메시지를 주고 받는것이기 때문에 인터페이스란 객체가 수신할 수 있는 메시지의 목록이라고 할 수 있다. - 책임, 메시지, 인터페이스 여태까지 살펴본 책임, 메시지, 인터페이스를 잠시 정리하는 시간을 가져보자. 맨 먼저 객체의 자율.. 2021. 8. 24.
객체지향의 사실과 오해 - 객체지향의 핵심 - 이 글은 조영호의 객체지향의 사실과 오해를 기반으로 작성되었습니다. (가능하면 꼭 읽어보는것을 추천드립니다.) - 객체지향의 핵심, 메시지 객체지향이라는 단어를 들으면 가장 먼저 생각나는것은 클래스이다. 프로그램을 구현하라고 하면 우리가 가장 먼저 하는 일은 클래스를 선언하고 속성과 메소드를 채워넣는것이다. 그리고 클래스간의 의존성을 관리하며 상속도 사용한다. 하지만 객체지향의 강력함은 객체들이 주고 받는 메시지에서 나온다. 따라서 객체들의 속성과 행위를 먼저 식별해야 한다. 클래스는 단지 객체들의 특성과 행위를 정적으로 표현하는 추상화 도구일뿐이다. 문제는 클래스보다 객체를 우선시한다고 해결되지 않는다는 것이다. 객체들의 속성과 행위를 먼저 식별해야 한다는 말을 개별적인 객체에 집중하라는 의도로 오.. 2021. 8. 18.
객체지향의 사실과 오해 - 메시지와 메소드 - 이 글은 조영호의 객체지향의 사실과 오해를 기반으로 작성되었습니다. (가능하면 꼭 읽어보는것을 추천드립니다.) - 책임 객체는 다른 객체로 부터 요청을 수신하였을 때 이 요청을 자율적으로 처리할 수 있는 존재여야 한다. 그리고 이때 객체가 처리하기 위해 수행하는 행동을 책임이라고 부른다. 앞의 역할,책임,협력 글에서 왕은 모자장수에게 '증언하라' 는 메시지를 전달했다. 메시지는 수신자의 책임을 암시하므로 모자장수는 증언해야할 책임이 생긴다. 왕은 모자장수가 증언만 수행할 수 있다면 어떤식으로 하든지 방법에는 신경쓰지 않는다. 말이나 글로 혹은 영상 녹화본이 있다면 영상을 제출할 수도 있다. 만약 왕이 모자장수에게 요청하는 내용이 아주 세부적이라면 어떻게 될까? 간결하게 '증언하라' 라고 요청했을 때와.. 2021. 8. 16.
객체지향의 사실과 오해 - 역할, 책임, 협력 - 이 글은 조영호의 객체지향의 사실과 오해를 기반으로 작성되었습니다. (가능하면 꼭 읽어보는것을 추천드립니다.) - 협력 협력은 한 사람이 다른 사람에게 도움을 요청할 때 시작한다. 요청받은 사람은 일을 처리한 후 요청자에게 응답하는데 만약 자신이 혼자서 처리할 수 없는 일을 맞이하면 다른사람에게 요청한다. 이처럼 협력은 다수의 연쇄적인 요청과 응답으로 구성되어 있다. 이상한 나라의 엘리스에서 하트 잭은 파이를 훔쳤다는 혐의로 재판을 받는다. 판사 역할을 맡은 왕은 토끼에게 증인을 부르라고 명령한다. 모자장수가 증인으로 등장하고 증언을 마친 후 퇴장한다. 이렇게 하트 잭을 재판하는 과정은 일종의 협력이라고 볼 수 있다. 위의 다이어그램은 재판의 과정을 도식화하여 나타낸 UML 협력 다이어그램이다. 재판.. 2021. 8. 13.
객체지향의 사실과 오해 - 타입과 추상화 - 이 글은 조영호의 객체지향의 사실과 오해를 기반으로 작성되었습니다. (가능하면 꼭 읽어보는것을 추천드립니다.) - Javascript 프로토타입 상속: https://developer.mozilla.org/ko/docs/Web/JavaScript/Inheritance_and_the_prototype_chain - 추상화와 복잡성 초기의 지하철 노선도는 실제 지형을 참조한 곡선의 경로와 역간의 위치 거리 등의 정보를 충실하게 반영했었다. 하지만 현재 노선도는 직선 형태이며 역간의 거리도 실제 거리와는 무관하다. 그럼에도 목적지까지 이동하는데 불편함이 없다. 추상화의 본질은 사용자의 목적을 달성할 수만 있다면 복잡한 정보를 제거함으로써 본질을 드러내게 하는것이다. 복잡성을 다루기 위해 추상화는 두 가지 .. 2021. 8. 12.
객체지향의 사실과 오해 - 객체란 무엇인가 - 이 글은 조영호의 객체지향의 사실과 오해를 기반으로 작성되었습니다. (가능하면 꼭 읽어보는것을 추천드립니다.) - 엘리스와 객체지향의 공통점 저자는 객체지향을 설명하기 위해 이상한 나라의 앨리스 이야기를 예시로 들고 있다. 사실 나는 이상한 나라의 앨리스를 읽어보진 않았지만 그래도 이해하는데 전혀 무리가 없도록 자세히 설명해주고 있다. 엘리스는 아름다운 정원으로 들어가기 위해 많은 노력을 한다. 그 과정에서 음식을 먹거나 부채질을 하면 키가 변하는 이상현상을 겪게 된다. 그리고 이를 이용해 키를 변화시키면서 목표했던 아름다운 정원에 들어가게 된다. 엘리스의 키나 현재위치는 상태라고 볼 수 있다. 엘리스의 상태가 변하는것은 케이크를 먹거나 부채질을 하는 등의 행동을 했기 때문이다. 또한 현재 상태에 따.. 2021. 8. 9.
객체지향의 사실과 오해 - 협력하는 객체들 - 이 글은 조영호의 객체지향의 사실과 오해를 기반으로 작성되었습니다. (가능하면 꼭 읽어보는것을 추천드립니다.) - God Object: https://en.wikipedia.org/wiki/God_object - 개요 개발자나 설계자는 실세계의 사물이나 상황을 소프트웨어로 구현하고 사물의 속성과 행동을 클래스의 속성과 메소드로 구현하는것이 "객체지향적"이라고 생각하지만 실상은 소프트웨어와 실세계 사물간의 거리가 먼 것이 일반적이다. 그렇다면 컴퓨터공학을 전공하면서 지겹도록 듣던 붕어빵틀과 붕어빵은 도대체 뭘까? 엄청나게 똑똑해서 박사과정을 수료 하고 전공서적을 쓴 사람들은 헛소리를 한 것일까? 그것은 실세계의 모방이라는 관점으로 설명하는것이 객체 지향의 첫 발을 들여놓는 입문자들에게 객체 지향의 개념.. 2021. 8. 8.
설계원칙 - SOLID(SRP) - 이 글은 로버트 C.마틴의 Clean Architecture를 기반으로 작성되었습니다. (가능하면 책을 읽어보는것을 추천한다.) - 개요 단일 책임 원칙은 가장 많은 오해를 사고 있는 원칙이다. 이름만 보면 마치 하나의 모듈은 하나의 일만 해야하는 것처럼 느껴진다. 하지만 이는 오해이다. 하나의 모듈은 하나의 액터(사용자 및 이해관계자)에 대해서만 책임져야 한다. 모듈이란 보통의 경우엔 소스파일이다. SRP를 위반하는 원칙들을 살펴보면서 SRP를 이해해보자. - 징후: 우발적 증복 급여 어플리케이션에서 Employee 클래스가 있고, 해당 클래스에서 calculatePay(), reportHours(), save() 메소드를 제공한다고 해보자. 이 클래스는 SRP를 위반한다고 할 수 있는데, diag.. 2021. 2. 10.
UML - 객체 다이어그램 - 이 글은 UML Distilled (마틴 파울러)책을 기반으로 작성하였습니다. - 객체 다이어그램 객체 다이어그램은 객체들의 특정 순간의 모습이다. 클래스가 아닌 인스턴스를 보여주므로, 인스턴스 다이어그램이라고도 한다. 위의 다이어그램에서 모임,사람,조직으로 이루어진 윗 부분은 클래스의 세트를 보여주고 있고, 아래는 객체의 연관 세트를 보여준다. 객체의 연관 세트에서 이름 아래에 밑줄이 쳐져있으므로 이는 인스턴스임을 나타낸다. 표기는 [인스턴스명 : 클래스명]의 형태를 갖는다. 인스턴스명과 클래스명은 둘 다 선택사항이므로 클래스명만 나타내도 상관없다. 다만 인스턴스명만 나타낼 경우 콜론을 생략해도 되지만 클래스명만 나타낼 경우 콜론을 생략하면 인스턴스명과 구분이 되지 않으므로 [:클래스명]으로 표시해.. 2021. 2. 10.