2021. 3. 17. 09:49ㆍEngineer
UI design 내용인가 싶어서 훑어봤더니, 코딩 디자인 패턴이었다. 그래서 코딩 공부에 도움이 되겠지 싶어서 빌려왔다.
읽어보니 책의 짜임새가 마음에 들었다. 학습이라는 목표에 도움이 되도록 시각적인 설명이 많이 있었고, 잦은 반복과 딱딱하지 않은 문체, 그리고 생각할 거리들을 많이 던져주고 있다. 그래서 다음번에도 Head First 시리즈로
책에서 학습과 관련된 내용 정리
뭔가를 배우려면 어떻게 해야 할까요? 우선 어떤 것을 이해한 다음 잊어버리지 말아야 되겠죠. 하지만 지식을 그냥 머리 속에 밀어 넣는다고 해서 무조건 배울 수 있는 것은 아닙니다. 인지과학, 신경 생물학, 학습 심리학 분야에서의 최근 연구 결과에 의하면 종이 위에 적혀 있는 텍스트 만으로는 부족하다고 합니다. 머리가 쌩쌩하게 돌아가도록 하려면 다음과 같이 하는 것이 좋습니다.
1. 비주얼하게 만들자. 단어만 기억하는 것보다 그림을 사용하는 편이 기억하기도 훨씬 좋고 학습 효과를 향상시키는데에도 도움이 된다. 단어를 관련된 그림 안에, 또는 그 바로 옆에 집어 넣으면 그림 아래, 또는 그림과 동떨어진 위치에 집어 넣는 경우에 비해 그 내용과 관련된 문제를 성공적으로 해결할 가능성이 두배이상 올라간다고 한다.
2. 개인적인 대화 형태의 문체를 사용하자. 최근의 연구에 의하면 내용을 딱딱하고 형식적인 말투로 설명하는 경우에 비해 개인적인 대화를 나누는 듯한 문체로 설명하면 학습 후 테스트에서 40%정도까지 더 나은 점수를 받을 수 있다고 한다. 일상적인 구어체로 설명하는 것이 좋다.
3. 더 깊이 생각할 수 있도록 만들자. 즉 뉴런을 활발하게 사용하지 않으면 머리 속에서 그리 특별한 일이 일어나지 않는다. 항상 문제를 풀고 결과를 유추하고 새로운 지식을 만들어낼 수 있는 동기, 흥미, 호기심, 사기를 불어넣을 수 있어야 한다. 그리고 그렇게 하려면 뭔가 도전의식으 고취시킬 수 있을만한 연습문제, 질문, 그리고 양쪽 두뇌를 모두 써야하는 활동, 여러 감각을 활용할 수 있는 일을 제공해야 한다.
4. 독자가 계속해서 주의를 기울일 수 있도록 하자. 사람의 두뇌는 언제나 일상적이지 않은 것, 재미있는 것, 특이한 것, 눈길을 끄는 것, 예기치 못한 것에 주의를 기울이게 된다. 지루하지만 않다면 두뇌에서 새로운 내용을 훨씬 빠르게 받아들일 수 있다.
5. 독자의 감성을 자극하자. 뭔가를 기억하는 능력은 그 내용을 얼마나 감성을 자극하는지에 따라 크게 달라진다. 자신이 좋아하는 것, 많은 관심을 가지고 있는 것은 매우 쉽게 기억할 수 있다. 뭔가를 느낄 수 있으면 수월하게 기억할 수 있다. "오 신기한데?", "이럴수가!", "내가 해냈어!"와 같은 감정을 느낄 수 있다면 배우는 과정에 크게 도움이 된다고 한다.
정말 배우고 싶다면, 그리고 더 빠르게, 더 자세하게 배우고 싶다면 자신이 어떤 식으로 주의를 기울이는지에 대해 주의를 기울일 필요가 있다. 생각하는 방법에 대해 생각해 보고, 배우는 방법을 배워야 한다.
어떤 형태로든지 공부를 할 때 최대한 많은 것을 얻어내려면 두뇌를 자유자재로 쓸 수 있어야 한다. 자신의 두뇌를 그 내용에만 집중을 해야 한다. 그렇게 하려면 당신의 두뇌에서 새로 배우는 내용을 아주 중요한 것, 생조에 필수적인 것이라고 느끼게 만들어야 한다. 그렇지 않으면 새로운 내용을 받아들이지 않으려고 하는 두뇌와 끊임 없이 씨름 할 수밖에 없다.
어떻게 해야 두뇌에서 중요한 것으로 인식할 수 있을까? 느리고 지루한 방법도 있고 빠르고 효율적인 방법도 있다. 느린 방법은 반복에 의지하는 것이다. 같은 내용을 계속 반복해서 주입하면 아무리 재미없는 내용이라도 배우고 기억할 수 있다. 빠른 방법은 두뇌 활동, 그중에서도 서로 다른 유형의 두뇌 활동을 증가시킬 수 있는 방법을 활용하는 것이다. 그 방법이 위에 설명한 5가지이다.
두뇌를 정복하는 방법
1. 천천히 하세요. 더 많이 이해할 수록 외울 내용은 줄어들게 마련입니다.
2. 연습문제를 꼭 풀어봅시다. 간단하게 메모를 하는 것도 좋습니다.
3. 잠자리에 들기 직전에 마지막으로 이 책을 읽어보세요. 학습 과정의 일부(특히 장기 기억으로의 전이 과정)는 책을 놓은 후에 일어납니다. 여러분의 두뇌에서 어떤 처리과정을 처리하는 데에는 시간이 필요하기 때문이죠. 그런 처리 작업 중간에 다른 것이 끼어들면 새로배운 것을 잊어버릴 가능성이 높아집니다.
4. 물을 마십시다. 될 수 있으면 많이 마시는 것이 좋습니다. 머리가 잘 돌아가려면 물이 많이 필요합니다. 수분이 부족하면 인지 기능이 저하됩니다.
7. 새로 배운 것을 소리내어 말해 봅시다. 소리내어 읽을 때는 두뇌에서 눈으로 읽기만 할 때와는 다른 부분이 활성화 됩니다. 뭔가를 이해하려고 하거나 나중에 더 잘 기억하고 싶다면 크게 소리를 내어 말해보세요. 다른 사람한테 설명하면 더 좋습니다.
8. 자신의 뇌의 반응에 귀를 기울여 봅시다. 여러분의 두뇌가 너무 힘들어하고 있지는 않은지 관심을 가져봅시다. 대강 훑어보고 있거나 방금 읽은 것을 바로 잊어버린다는 느낌이 들면 잠시 쉬는 것이 좋습니다.
9. 뭔가를 느껴봅시다. 여러분의 두뇌에서 지금 공부하고 있는 것이 중요하다고 느낄 수 있어야 합니다. 책속에 나와있는 이야기에 몰입해 보세요. 그리고 책에 나와있는 사진에 직접 제목을 붙여보세요. 아무것도 느끼지 않는 것보다는 썰렁한 농담을 보고 비웃기라도 하는 쪽이 낫습니다.
10. 직접 디자인해 봅시다.
책 내용 정리
디자인 원칙
1. 애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리 시킨다.
2. 구현이 아닌 인터페이스에 맞춰서 프로그래밍 한다.
3. 상속보다는 구상을 활용한다.
4. 서로 상호작용을 하는 객체 사이에서는 가능하면 느슨하게 결합하는 디자인을 사용해야 한다.
5. 클래스는 확장에 대해서 열려있지만 변경에 대해서는 당혀 있어야 한다. (OCP)
6. 추상화된 것에 의존하라. 구상 클래스에 의존하지 않도록 한다.
7. 최소 지식 원칙 - 정말 친한 친구하고만 얘기하라.
8. 클래스가 바뀌게 되는 이유는 한가지 뿐이어야 한다.
패턴
1. 스트래티지 패턴(Strategy Pattern) : 알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다. 스트래티지를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다.
2. 옵저버 패턴(Observer Pattern) : 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one to many)의존성을 정의합니다.
3. 데코레이터 패턴(Decorator Pattern) : 객체에 추가요소를 동적으로 더할 수 있습니다. 데코레이터를 사용하면 서브클래스를 만드는 경우에 비해 훨씬 유연하게 기능을 확장할 수 있습니다.
4-1. 팩토리 메소드 패턴 (Factory Method Pattern) : 객체를 생성하기 위한 인터페이스를 만듭니다. 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하도록 합니다. 팩토리 메소드를 이용하면 인스턴스를 만드는 일을 서브클래스로 미룰 수 있습니다. 객체 생성을 캡슐화 하기 위한 패턴
4-2. 추상 팩토리 패턴 (Factory Pattern) : 서로 연관된, 또는 의존적인 객체들로 이루어진 제품군을 생성하기 위한 인터페이스를 제공합니다. 구상 클래스는 서브클래스에 의해 만들어지죠. 객체 생성을 캡슐화 하기 위한 패턴
5. 싱글턴 패턴(Singleton Pattern) : 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴
6. 커맨드 패턴(Command Pattern) : 요구 사항을 객체로 캡슐화 할수 있으며, 매개변수를 써서 여러 가지 다른 요구 사항을 집어넣을 수도 있습니다. 또한 요청 내역을 큐에 저장하거나 로그로 기록할 수도 있으며, 작업 취소 기능도 가능합니다.
7-1. 어댑터 패턴(Adaptor Pattern) : 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환합니다. 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있습니다.
7-2. 퍼사드 패턴(Facade Pattern) : 어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공합니다. 퍼사드에서 고수준 인터페이스를 정의하기 때문에 서브시스템을 더 쉽게 사용할 수 있습니다.
8. 템플릿 메소드 패턴 (Templet Method Pattern) : 메소드에서 알고리즘의 골격을 정의합니다. 알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있습니다. 템플릿 메소드를 이용하면 알고리즘의 구조는 그대로 유지하면서 서브클래스에서 특정 단계를 재정의할 수 있습니다.
9-1. 이터레이터 패턴(Iterator Pattern) : 컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 수 있게 해주는 방법 제공해 줍니다.
9-2. 컴포지트 패턴(Composite Pattern) : 객체들을 트리 구조로 구성하여 부분과 전체를 나타내는 계층구조로 만들 수 있습니다. 이 패턴을 이용하면 클라이언트에서 개별 객체와 다른 객체들로 구성된 복합 객체를 똑같은 방법으로 다룰 수 있습니다.
10. 스테이트 패턴(State Pattern) : 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 바꿀 수 있습니다. 마치 객체의 클래스가 바뀌는 것과 같은 결과를 얻을 수 있습니다.
11. 프록시 패턴(Proxy Pattern) : 어떤 객체에 대한 접근을 제어하기 위한 용도로 대리인이나 대변인에 해당하는 객체를 제공하는 패턴
12. 컴파운드 패턴(Compound Pattern) : 두개 이상의 패턴을 결합하여 일반적으로 자주 등장하는 문제들에 대한 해법을 제공합니다.
'Engineer' 카테고리의 다른 글
학교에서 알려주지 않는 17가지 실무 개발 기술 (0) | 2020.05.31 |
---|---|
Power Java compact 정리 (0) | 2019.07.09 |
온라인 공개 강좌(강의) 사이트 (0) | 2019.07.05 |
창업자가 알아야할 창업의 A-Z (0) | 2019.04.24 |
안드로이드 앱 프로그래밍 책을 빌려왔다. (0) | 2019.03.27 |