[소프트웨어 장인] 15장 실용주의 장인정신
안타깝게도 대부분 저급 품질의 싸고 빨리 만들 수 있는 코드를 선택하는 상황이 현실이다. 이 장에서는 ‘고품질은 고비용’이라는 것이 편견임을 설명한다.
안타깝게도 대부분 저급 품질의 싸고 빨리 만들 수 있는 코드를 선택하는 상황이 현실이다. 이 장에서는 ‘고품질은 고비용’이라는 것이 편견임을 설명한다.
소프트웨어 장인이 된다는 것이 어떤 의미인지, 성공적이고 만족스런 커리어를 어떻게 꾸릴 수 있을까?
지금 하는 프로젝트에 새로운 개발 언어나 프레임워크를 어떻게 도입할 수 있을까? 상당수의 개발자들이 켄트 벡이 이야기한 ‘사춘기적 맹신’에 빠져 있다. 그런 개발자들은 훌륭한 소프트웨어를 만들어 내는데 자기만의 비법이 있다고 생각하고 다른 것들은 무시해 버린다.
관리자들이 변화를 일으키려 할 때 일방적인 통보와 별 다를 바 없는 행동으로 아무런 효과도 봇지 못하는 경우를 흔하게 본다. 이 장에서는 배움의 문화를 만들기 위해 개발자들이 할 수 있는 여러 가지 활동들에 대해 살펴본다.
맥 빠진 팀에 다시 열정을 불어 넣으려 할 때 소프트웨어 장인이 어떤 도움을 줄 수 있는지 알아보자.
어떤 채용 절차를 거치는지, 면접에서 어떤 사람을 만나는지는 그 회사에 들어갈 것이냐 말 것이냐를 결정짓는 매우 중요한 요소다. 좋은 인재를 놓치지 않기 위해서 면접을 할 때 무엇을 피해야할지 알아보자.
면접은 쌍방향이다. 회사는 그들의 목적을 달성하는 데 도움을 줄 수 있는 개발자를 찾으려 하고, 개발자는 자신의 열망과 커리어 방향에 적합한 회사를 찾으려 한다. 새로운 회사에서 일하는 것은 커리어상 대단히 중요한 결정이어서 개인의 삶에 직접적으로 영향을 미친다. 회사와 개발자들이...
새로운 인재를 채용할 때 현재의 문제를 더 키우지 않아야 한다는 것을 우선으로 고려해야 한다. 현재의 업무가 제대로 진행이 안되고 잘못된 행동들을 하고 있는 기존의 개발자들이 문제라면, 그와 똑같이 행동할 사람을 또 채용하는 일이 없도록 해야한다.
브라질 어느 십대 소년의 이야기
특정한 기술적 실행 관례가 실제 비즈니스에 가치가 있다면 어떤 부분이 그러할까?
소프트웨어 프로젝트는 중요한 일들이 상당히 많아서 그에 비해 덜 중요해 보이는 것들, 예를 들어 코드의 품질에는 조직 차원의 주의를 기울이지 않는 경향이 있다. 이 장에서는 왜 동작하는 소프트웨어 만으로는 부족한지, 나쁜 소프트웨어가 보이지 않는 어떤 문제들을 일으키는지 알바볼 것...
말도 안되는 일정 속에서 팀원 모두가 프로젝트를 성공해내길 바라며, 모두 영웅이 되고 싶어했다. 전형적인 폭포수 방식으로 진행되었던 프로젝트에서 모두가 프로페셔널하지 못했다. 고객이 실제로 무엇을 원하는지 이해하려 하지 않았고 다른 대안을 제시하지도 않았다. 고객을 만날 수도 없기...
더 나은 비유
오래 전에 작성했던 코드를 지금에 와서도 고칠 부분이 없어 보인다면, 그것은 그동안 배운 것이 없다는 뜻이다. 소프트웨어 장인이라면 계속해서 더 나은 프로페셔널이 되기 위해 일평생 정진해야 한다.
21세기의 소프트웨어 개발
애자일 방대한 문서 작업을 기반으로 하는 소프트웨어 개발 방법론에 어떤 대안이 있을지 소프트웨어 업계에 영향력 있는 17명이 유타주의 스키 리조트에 모였다. 긴 토론 끝에, 애자일 매니페스토가 창안되었고 애자일 연합이 만들어 졌다.
“복잡성은 죽음이다. 개발자에게 생기를 앗아가며, 제품을 계획하고 제작하고 테스트 하기 어렵게 만든다.” -레이 오지, 마이크로소프트 최고 기술 책임자(cto)
창발적 설계로 깔끔한 코드를 구현하자
클래스 체계
TDD 법칙 세 가지
외부 코드 사용하기
오류 처리는 프로그램에 반드시 필요한 요소 중 하나다. 입력이 이상하거나 디바이스가 실패할지도 모르기 때문이다. 간단히 말해, 뭔가 잘못될 가능성은 늘 존재한다. 뭔가 잘못되면 바로 잡을 책임은 바로 우리 프로그래머에게 있다. 깨끗한 코드와 오류 처리는 확실히 연관성이 있다. 상...
변수를 비공개(private)로 정의하는 이유가 있다. 남들이 변수에 의존하지 않게 만들고 싶어서다. 충동이든 변덕이든, 변수 타입이나 구현을 맘대로 바꾸고 싶어서다. 그렇다면 어째서 수많은 프로그래머가 조회(get)함수와 설정(set)함수를 당연하게 공개(public)해 비공개...
작게 만들어라!
프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야 한다. 코드 형식을 맞추기 위한 간단한 규칙을 정하고 그 규칙을 착실히 따라야 한다. 팀으로 일한다면 팀이 합의해 규칙을 정하고 모두가 그 규칙을 따라야 한다. 필요하다면 규칙을 자동으로 적용하는 도구를 활용한다.
나쁜 코드에 주석을 달지마라. 새로 짜라. 브라이언 W. 커니핸, P.J. 플라우거
의도를 분명히 밝혀라
깨끗한 코드
제어의 역전 IoC(Inversion of Control)
쓰레드(Thread)란?
쓰레드를 생성하는 방법은 크게 2가지로 나눌수 있다. Thread 클래스를 상속받아 run() 메서드를 오버라이딩하는 것 Runnable 인터페이스를 구현한 객체를 생성한뒤 run() 메서드를 구현하는 것
쓰레드의 객체를 참조하거나 우선순위를 지정하는 것, 쓰레드의 속성 종류와 활용하는 방법
이너 클래스의 종류 클래스 내부에 포함되는 이너 클래스(inner class)는 인스턴스 맴버 이너 클래스, 정적 맴버 이너클래스 그리고 지역 이너 클래스로 나뉜다.
인터페이스의 정의와 특징 인터페이스는 내부의 모든 필드가 public static final로 정의 되고, static과 default 메서드 이외의 모든 모든 메서드는 public abstract로 정의된 객체지향 프로그래밍 요소다. class 키워드 대신 interface 키...
추상 클래스의 정의
접근 지정자
클래스의 개념
필드와 지역 변수
현실 세계에서는 종종 같은 종류의 많은 개별 객체를 찾을 수 있습니다. 예를들면 제조사와 모델이 모두 같은 수천 대의 다른 자전거가 존재할 수 있습니다. 각각의 자전거는 동일한 청사진 세트(blueprints)로 제작되었으므로 동일한 구성 요소를 포함합니다. 이를 객체 지향 용어로...
클래스 상속 클래스의 상속은 부모 클래스의 맴버(필드, 메서드, 이너 클래스)를 내려받아 자식 클래스 내부에 포함시키는 자바의 문법 요소다.
익명 이너 클래스의 정의와 특징 말 그대로 ‘이름을 알 수 없는 이너 클래스’를 의미한다. 익명 이너 클래스는 정의된 위치에 따라 분류할 수 있다. 클래스의 중괄호 바로 아래에 사용했을 때는 인스턴스 익명 이너 클래스
추상 클래스의 정의
클래스의 개념
필드와 지역 변수
가상화에는 크게 두 유형이 있다. 물리 서버를 가상화하는 ‘서버 가상화’와 물리적 네트워크를 구성을 가상화하는 ‘네트워크 가상화’다.
객체는 객체 지향(object-oriented) 기술을 이해하는 데 핵심입니다.
자료형이 서로 다를 때는 컴파일러가 자동으로 타입을 변환해 주거나 개발자가 직접 명시적으로 타입을 변환해 줘야한다. 객체에서도 이러한 타입 변환이 일어나는데 이름 업캐스팅(Upcasting), 다운캐스팅(Downcasting)이라 한다.
클래스 상속 클래스의 상속은 부모 클래스의 맴버(필드, 메서드, 이너 클래스)를 내려받아 자식 클래스 내부에 포함시키는 자바의 문법 요소다.
클래스의 개념
객체는 노출된 메서드를 통해 외부 세계와의 상호 작용을 정의합니다. 메소드는 외부 세계와 객체의 인터페이스를 형성합니다. 예를 들어 텔레비전 전면에 있는 버튼은 사용자와 플라스틱 케이스의 다른 쪽 전기 배선 사이의 인터페이스입니다. “전원” 버튼을 눌러 TV를 켜고 끕니다.
정의와 특징 중요한 특징 중 하나는 정적 이너 인터페이스만 존재할 수 있다는 것이다. 만일 이너 인터페이스 앞에 static 제어자를 생략하면 컴파일러가 자동으로 추가해 준다.
인터페이스의 정의와 특징 인터페이스는 내부의 모든 필드가 public static final로 정의 되고, static과 default 메서드 이외의 모든 모든 메서드는 public abstract로 정의된 객체지향 프로그래밍 요소다. class 키워드 대신 interface 키...
쓰레드(Thread)란?
쓰레드를 생성하는 방법은 크게 2가지로 나눌수 있다. Thread 클래스를 상속받아 run() 메서드를 오버라이딩하는 것 Runnable 인터페이스를 구현한 객체를 생성한뒤 run() 메서드를 구현하는 것
쓰레드의 객체를 참조하거나 우선순위를 지정하는 것, 쓰레드의 속성 종류와 활용하는 방법
쓰레드(Thread)란?
쓰레드를 생성하는 방법은 크게 2가지로 나눌수 있다. Thread 클래스를 상속받아 run() 메서드를 오버라이딩하는 것 Runnable 인터페이스를 구현한 객체를 생성한뒤 run() 메서드를 구현하는 것
쓰레드의 객체를 참조하거나 우선순위를 지정하는 것, 쓰레드의 속성 종류와 활용하는 방법
익명 이너 클래스의 정의와 특징 말 그대로 ‘이름을 알 수 없는 이너 클래스’를 의미한다. 익명 이너 클래스는 정의된 위치에 따라 분류할 수 있다. 클래스의 중괄호 바로 아래에 사용했을 때는 인스턴스 익명 이너 클래스
이너 클래스의 종류 클래스 내부에 포함되는 이너 클래스(inner class)는 인스턴스 맴버 이너 클래스, 정적 맴버 이너클래스 그리고 지역 이너 클래스로 나뉜다.
자바에서는 다양한 종류의 클래스와 인터페이스를 제공하고 있다. 이런 클래스와 인터페이스를 내부 맴버에서 활요하는 클래스를 작성하고자 할 때는 제공되는 클래스나 인터페이스의 다양성 만큼이나 많은 가짓수의 클래스를 생성해야 한다. 이러한 비효율성을 한 번에 해결하는데 필요한 문법 요소...
제네릭 타입 범위 제한의 필요성 다양한 타입을 처리할 수 있다는 장접이 있지만 어떤 타입으로 올지 모르기 때문에 Object 클래스의 메서드 외에는 사용할 수 있는 메서드가 제한적이다.
자바에서는 다양한 종류의 클래스와 인터페이스를 제공하고 있다. 이런 클래스와 인터페이스를 내부 맴버에서 활요하는 클래스를 작성하고자 할 때는 제공되는 클래스나 인터페이스의 다양성 만큼이나 많은 가짓수의 클래스를 생성해야 한다. 이러한 비효율성을 한 번에 해결하는데 필요한 문법 요소...
제네릭 타입 범위 제한의 필요성 다양한 타입을 처리할 수 있다는 장접이 있지만 어떤 타입으로 올지 모르기 때문에 Object 클래스의 메서드 외에는 사용할 수 있는 메서드가 제한적이다.
서로 다른 종류의 객체는 종종 서로 일정량의 공통점을 가지고 있습니다.
클래스 상속 클래스의 상속은 부모 클래스의 맴버(필드, 메서드, 이너 클래스)를 내려받아 자식 클래스 내부에 포함시키는 자바의 문법 요소다.
CI/CD 배포 파이프라인 구축
1. 개발자가 된 계기
필드와 지역 변수
필드와 지역 변수
필드와 지역 변수
필드와 지역 변수
접근 지정자
접근 지정자
정의와 특징 중요한 특징 중 하나는 정적 이너 인터페이스만 존재할 수 있다는 것이다. 만일 이너 인터페이스 앞에 static 제어자를 생략하면 컴파일러가 자동으로 추가해 준다.
제네릭 타입 범위 제한의 필요성 다양한 타입을 처리할 수 있다는 장접이 있지만 어떤 타입으로 올지 모르기 때문에 Object 클래스의 메서드 외에는 사용할 수 있는 메서드가 제한적이다.
제네릭 타입 범위 제한의 필요성 다양한 타입을 처리할 수 있다는 장접이 있지만 어떤 타입으로 올지 모르기 때문에 Object 클래스의 메서드 외에는 사용할 수 있는 메서드가 제한적이다.
클래스 상속 클래스의 상속은 부모 클래스의 맴버(필드, 메서드, 이너 클래스)를 내려받아 자식 클래스 내부에 포함시키는 자바의 문법 요소다.
자료형이 서로 다를 때는 컴파일러가 자동으로 타입을 변환해 주거나 개발자가 직접 명시적으로 타입을 변환해 줘야한다. 객체에서도 이러한 타입 변환이 일어나는데 이름 업캐스팅(Upcasting), 다운캐스팅(Downcasting)이라 한다.
자료형이 서로 다를 때는 컴파일러가 자동으로 타입을 변환해 주거나 개발자가 직접 명시적으로 타입을 변환해 줘야한다. 객체에서도 이러한 타입 변환이 일어나는데 이름 업캐스팅(Upcasting), 다운캐스팅(Downcasting)이라 한다.
자료형이 서로 다를 때는 컴파일러가 자동으로 타입을 변환해 주거나 개발자가 직접 명시적으로 타입을 변환해 줘야한다. 객체에서도 이러한 타입 변환이 일어나는데 이름 업캐스팅(Upcasting), 다운캐스팅(Downcasting)이라 한다.
자바 스트림(java stream)은 자바8 API 에 새로 추가된 기능이다. 스트림은 원하는 결과를 생성하기 위해 파이프라인될 수 있는 다양한 메서드를 지원하는 일련의 객체입니다.
람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다.
람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이라고 할 수 있다.
리눅스 시스템에서 파일과 디렉터리 관리에 사용되는 명령어 리눅스 시스템은 계층적으로 구성된 디렉터리 구조에 파일을 보관한다. 계층적 디렉터리(폴더) 구조란 트리 형태 안에 다수의 디렉터리가 존재한다는 의미이다. 여기서 각 디렉터리는 다수의 파일과 서브 디렉터리를 포함할 수 있다.
리눅스 시스템에서 파일과 디렉터리 관리에 사용되는 명령어 리눅스 시스템은 계층적으로 구성된 디렉터리 구조에 파일을 보관한다. 계층적 디렉터리(폴더) 구조란 트리 형태 안에 다수의 디렉터리가 존재한다는 의미이다. 여기서 각 디렉터리는 다수의 파일과 서브 디렉터리를 포함할 수 있다.
패키지는 관련 클래스 및 인터페이스 집합을 구성하는 네임스페이스입니다. 개념적으로 패키지는 컴퓨터의 다른 폴더와 유사하다고 생각할 수 있습니다. HTML 페이지는 한 폴더에, 이미지는 다른 폴더에, 스크립트나 애플리케이션은 또 다른 폴더에 보관할 수 있습니다. Java 프로그래밍...
minikube install
조동사(auxiliary verb)란?
조동사(auxiliary verb)란?
조동사(auxiliary verb)란?
품사(part of speech)란?
Sentence Structures
시제(Tense)란?
시제(Tense)란?
INFCON 2023
INFCON 2023
SQL Server와 같은 관계형 데이터베이스의 테이블 간의 관계를 이해하고 설계하는 것이 중요합니다. 관계형 데이터베이스에서 각 테이블들은 Primary, Foreign 키 제약 조건을 사용하여 다른 테이블에 연결됩니다.
SQL Server와 같은 관계형 데이터베이스의 테이블 간의 관계를 이해하고 설계하는 것이 중요합니다. 관계형 데이터베이스에서 각 테이블들은 Primary, Foreign 키 제약 조건을 사용하여 다른 테이블에 연결됩니다.
SQL Server와 같은 관계형 데이터베이스의 테이블 간의 관계를 이해하고 설계하는 것이 중요합니다. 관계형 데이터베이스에서 각 테이블들은 Primary, Foreign 키 제약 조건을 사용하여 다른 테이블에 연결됩니다.