의사결정 우리는 끊임없는 의사결정을 하게 된다. 일상에서는 두개의 의견이 부딪히는 대립을 느끼지 못한다. 의사결정의 주체와 책임은 개인이 지는게 대부분 이기 때문이다. 그러나 팀 안에서도 그럴까? 팀 안에서의 의사결정 YES or NO 팀 안에서 여러가지 의사결정을 하게된다. 하나의 사실을 보더라도 관점이 다르기 때문이다. 애초에 서로 다른 배경과 지식을 가진 사람들이 똑같은 결정을 한다는게 이상한 일이다. 사람은 어떤 문제를 만나게 되면 다양한 결정을 하게된다. 그렇게 따져가다 보면 어떤일을 선택할지 안 할지 결정해야 할 때가 온다. 보통의 사람은 한 쪽 편에 서게 된다. 그렇다면 그 사람은 왜 그 편에 섰을까? 근거가 무엇이였을까? 사실 대부분의 사람들은 순간적인 의사결정에서 그렇게 완벽한 근거를 제..
1. 디자인 패턴 정의 디자인 패턴은 실제 개발 현장에서 비즈니스 요구 사항을 프로그래밍으로 처리하면서 만들어진 다양한 해결책 중에서 많은 사람들이 인정한 베스트 프랙티스를 정리한 것이다. 이러한 디자인 패턴은 객체지향 특성과 설계 원칙(SOLID)을 기반으로 한 것이다. 스프링과 디자인 패턴 스프링은 OOP 프레임워크 이다. 따라서 스프링은 객체 지향의 특성과 설계 원칙을 극한까지 적용한 프레임워크 이다. 스프링을 학습하기 위해서는 디자인 패턴 학습도 필요하다고 볼 수 있다. 2. 어댑터 패턴(Adapter Pattern) 정의 어댑터는 호환되지 않는 인터페이스를 가진 객체들이 협력(collaboration)할 수 있도록 하는 디자인 패턴 기본 구조 구조 설명 Client는 Target을 의존하고 있다..
SOLID 원칙 객체 지향 언어의 시초인 Simula67이 1960년 발표되고 50년 이상의 세월이 흘렀다. 그 세월 동안 수많은 시행착오와 베스트 프랙티스 속에서 다양한 객체 지향 설계가 존재했다. 그 설계들의 정수가 SOLID 원칙이다. SOLID는 로버트 C. 마틴이 2000년대 초반 객체 지향 프로그래밍 및 설계의 다섯가지 기본 원칙으로 제시한 것을 마이클 페더스가 두문자어로 소개한 것이다. 이 원칙들은 High Cohesion, Loose Coupling 이라는 고적 원칙을 객체 지향의 관점에서 재정립 한 것이다. SRP 원칙 정의 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다. 문제 하나의 클래스에서 너무 많은 역할과 책임을 지는 경우가 있다. 이럴 경우 변경해야 하는 요인이 많아..
abstract 키워드 추상 메서드 선언부는 있는데 구현부가 없는 메서드 추상 클래스 추상 메서들르 포함하면 반드시 추상 클래스여야 한다. 객체를 만들 수 없는 클래스 추상 메서드는 하위 클래스에게 메서드와 구현을 강제한다. 생성자 (객체 생성자 메서드) 반환값이 없고 클래스명과 같은 이름을 가진 메서드이며 객체를 생성한다. 개발자가 아무런 생성자도 만들지 않으면 자바는 인자가 없는 기본 생성자를 자동으로 만들어준다. 인자가 있는 생성자를 하나라도 만든다면 자바는 기본 생성자를 만들어 주지 않는다. static 블록 클래스가 스태틱 영역에 배치될 때 실행되는 코드 블록 static 예제 1 public class Animal { static { System.out.println("animal class ..
1. 헤드퍼스트 디자인패턴 후기 헤드퍼스트 시리즈는 문제가 있는 상황을 제시하고 함께 해결하는 방식으로 정보를 전달한다. 단순히 어떤 주제의 best practice는 이거니깐 이걸 외우라기보다 왜 그게 나오게 되었는지 전체적인 맥락을 풀어 설명한다. 그러다 보니 A는 B이다 라고 말하면 끝날 내용도 배경을 장황하게 말한다. 이 때문에 읽기 불편했던 적도 있었고 디자인 패턴은 이해 가는데 예제의 배경이 이해가 안 되는 배보다 배꼽이 더 큰 상황도 있었다. 하지만 기존 책에 비해 단순한 정보가 아닌 하나의 맥락에서 이해되기 때문에 읽고 나면 몇 배는 더 외우기 쉬웠다. 책에서 가장 어려웠던 개념은 책 후반부에 나오는 프록시였다. 프록시의 기본 구조는 단순하지만 거기서 파생되는 여러 가지 사용 예제들이 있다..
1.1 일반적인 오류와 에러 오류 일반적으로 프로그래밍에서의 오류는 예외 보다 더 심각한 문제를 말한다. 프로그램 종료 또는 시스템 환경의 근본적인 문제 수정과 같이 더 높은 수준의 개입이 필요하다. 반면에 예외는 프로그램 내에서 잡아서 처리할 수 있는 예외적인 조건을 나타내므로 정상적인 오류 처리 및 복구가 가능하다. 오류는 구문 오류와 런타임 오류로 나타날 수 있다. 구문 오류는 컴파일 타이밍에 문번적인 이유로 오류가 나타나며 이 경우 프로그램이 실행되지 않게 한다. 런타임 오류 런타임 오류는 프로그램이 실행중일 때 정상적인 작동을 하지 못하게 하는 상황, 조건 등이 발생 하였을 때 나타난다. 이러한 오류는 컴파일 단계가 아니라 프로그램 실행 중일 때 발견 된다. 잘못된 입력, 잘못된 리소스 사용, ..
1. 객체지향 프로그래밍 자바는 객체지향 언어이다. 객체지향 언어란? 프로그램을 객체로 구성하는 것 프로그램이 거대화 하면서 등장 관련 용어 개념적 용어: 객체 객체와 객체는 서로 협력한다. 즉 일을 잘게 쪼개서 객체에게 위임하고, 서로 협력하게 만든다. 이러한 객체는 타입으로 서로 구분한다. 기술적인 용어: class, instance 2. 객치쟈항의 특성 캡슐화 기능을 수행하는 단위로써 완전함을 갖는다. 객체의 정보가 밖에서 접근하거나, 밖에서 객체 내의 정보에 접근하지 못하게 한다. 즉 객체는 스스로 동작할 수 있는 환경을 갖고 있어야 하며 외부에 의존하거나, 외부의 침략을 제한하여야 한다. 접근 지정자 private: 객체 소유 protected: 상속된 객체에서도 접근 가능. friendly: ..
6월 2일 부터 간단하게 배운내용을 정리하는 TIL을 시작하였습니다! 1. JAVA 개발환경 JRE(Java Runtime Environment): JVM과 자바 프로그램을 실행시킬 때 필요한 라이브러리 API를 함께 묶어서 배포되는 패키지이다. JDK(Java Development Kit): JRE + 개발툴 => java(JVM을 실행한 후 class 파일을 읽어 들인 후 실행하는 역할) + javac(자바 소스를 class 파일로 변환) 2. Build Tool 빌드 툴은 다음의 과정을 자동화 하여 개발자가 더욱 효율적으로 개발할 수 있도록 도와주는 도구이다. 컴파일 패키징 테스트 배포 대표적인 빌드 툴 : Ant, Maven, Gradle Gradle 예시: gradle init으로 프로젝트 생성..
우리는 어떻게 인터넷으로 정보를 교환할까? 간단하게 말하자면 OSI 7 Layer라고 불리는 모델의 구현체를 통해 데이터를 전송하고 해석함으로 데이터를 주고 받는다. 이게 무슨 소리일까? 1. OSI 7 Layer 네트워크를 통해 데이터를 전송하는것은 아주 어려운 일이다. 한 단체에서 주도적으로 할 수 있는 일이 아니었다. 따라서 초기 부터 계층을 나눠 구현하고자 하였고 이를 통합하여 표준화 한것이 ISO(국제표준화기구)에서 1984년에 발표한 OSI 7 Layer이다. 위의 그림은 OSI 7 Layer를 통해 데이터를 전송하는것을 도식화한 그림이다. 그림은'Application Process 1'에서 'Application Process n' 에 데이터를 보내는 과정을 보여주고 있다. 처음 원본 데이터..
1. 논증의 미학 필자는 21p에 논증의 필요성을 말한다. "우리는 언어로 소통하고 교감해서 자신과 타인의 마음과 생각을 바꿀 수 있다. 말이든 글이든 원리는 같다. 언어로 감정을 건드리거나 이성을 자극하는 것이다. 감정이 아니라 이성적 사유 능력에 기대어 소통하려면 논리적으로 말하고 논리적으로 써야 한다. 그러려면 논증하는 방법을 알아야 한다. 효과적으로 논증하면 생각이 달라도 소통할 수 있고 남의 생각을 바꿀 수 있으며 내 생각이 달라지기도 한다." 사람과 사람의 생각은 같을 수 없다. 아무리 친한 사이라고 해도 서로의 의견이 대립될때가 있다. 하나의 목표를 삼고 이익을 추구하는 관계라도 그렇다. 의견이 대립될때 뇌의 논리적인 부분 보다 전두엽의 생존본능과 관련된 부분이 활성화 된다고 한다. 이익과 ..
