728x90
반응형
SMALL

프로젝트 관리자와 상관없이 프로그래머는 자신이 작성한 코드에 책임감을 깊이 있게 가져야 한다.

코드는 독자가 존재한다. 고로 가독성이 좋아야 한다.

깨끗한 코드는 결코 설계자의 의도를 숨기지 않는다. 

깨끗한 코드에는 의미있는 이름이 붙는다. 

테스트 주도 개발을 해야 한다. 모든 테스트를 통과한다.

중복이 없다.

시스템 내 모든 설계 아이디어를 표현한다.

클래스, 메서드, 함수 등을 최대한 줄인다.

코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라 불러도 되겠다.

코드가 그 문제를 풀기 위한 언어처럼 보인다면 아름다운 코드라고 불러도 되겠다.

 

 

728x90
반응형
LIST

'클린코드' 카테고리의 다른 글

<느낀점> 3장: 함수  (0) 2024.02.07
<느낀점> 2장 의미 있는 이름  (0) 2024.02.07
728x90
반응형
SMALL

-- 001. 테이블에서 특정 열 선택하기

-- 사원 테이블에서 사원 번호와 이름과 월급을 출력해 보겠습니다.

SELECT empno, ename, sal, deptno

FROM emp;

 

-- 002. 테이블에서 모든 열 선택하기

-- 사원 테이블을 모든 열(column)들을 전부 출력해 보겠습니다.

SELECT *

FROM emp;

 

-- 테이블의 모든 컬럼을 출력하고 맨 끝에 다시 한번 특정 컬럼을 한번 더 출력해야 하는 경우가 있습니다.

-- 이 경우 *(별표) 앞에 '테이블명.'을 붙여 주어 작성하고 그 다음 한번 더 출력하고자 하는 컬럼명을 작성합니다.

SELECT dept.*, deptno FROM dept;

 

-- 003. 컬럼 별칭을 사용하여 출력되는 컬럼명 변경하기

-- 사원 테이블의 사원 번호와 이름과 월급을 출력하는데 컬럼명을 한글로 '사원 번호', '사원 이름'으로 출력해 보겠습니다.

-- 대소문자를 구분하여 컬럼 별칭을 출력하고자 할 때는 별칭 양쪽에 더블 쿼테이션 마크를 감싸 줘야합니다.

-- 컬럼 별칭에 더블 쿼테이션 마크를 사용해야 하는 경우는 다음과 같습니다.

-- 1. 대소문자를 구분하여 출력할 때

-- 2. 공백문자를 출력할 때

-- 3. 특수문자를 출력할 때($,_,#만 가능)

SELECT empno as 사원번호, ename as 사원이름, sal as "Salary"

FROM emp;

 

-- 수식을 사용할 경우 출력되는 컬럼명도 수식으로 출력됩니다. 그런데 수식명이 아닌 한글'월급'으로 컬럼명을 출력하고 싶다면

-- 수식 뒤에 as를 작성하고 컬럼 별칭을 사용하면 됩니다.

SELECT ename, sal *(12 + 3000) as 월급

FROM emp

ORDER BY 월급 desc;

 

-- 004. 연결 연산자 사용하기(||)

-- 사원 테이블의 이름과 월급을 서로 붙여서 출력해 보겠습니다.

SELECT ename || sal

FROM emp;

 

-- 연결 연산자를 이용하면 컬럼과 컬럼을 서로 연결해서 출력할 수 있습니다.

SELECT ename || '의 월급은 ' || sal || '입니다' as 월급정보

FROM emp;

 

SELECT ename ||'의 직업은' || job || '입니다' as 직업정보

FROM emp;

 

-- 005. 주옥된 데이터를 제거해서 출력하기(DISTINCT)

-- 사원 테이블에서 직업을 출력하는데 중복된 데이터를 제외하고 출력해 보겠습니다.

SELECT DISTINCT job

FROM emp;

 

-- DISTINCT 대신 UNIQUE를 사용해도 됩니다.

SELECT UNIQUE job

FROM emp;

 

-- 006. 데이터를 정렬해서 출력하기(ORDER BY)

-- 실행순서는 다음과 같다. 1) FROM 2) SELECT 3) ORDER BY

-- 이름과 월급을 출력하는데 월급이 낮은 사원부터 출력해 보겠습니다.

SELECT ename, sal

FROM emp

ORDER BY sal asc;

 

-- ORDER BY절에는 다음과 같이 컬럼을 여러 개 작성할 수도 있습니다.

SELECT ename, sal as 월급

FROM emp

ORDER BY 월급 asc;

 

-- 부서 번호를 먼저 asceding 하게 정렬하고, 부서 번호를 ascending하게 정렬된 것을 기준으로 월급을 desceding하게 정렬하고 있습니다.

SELECT ename, deptno, sal

FROM emp

ORDER BY deptno asc, sal desc;

 

-- ORDER BY절에 컬럼명 대신 숫자를 적어줄 수도 있습니다.

SELECT ename, deptno, sal

FROM emp

ORDER BY 2 ASC, 3 DESC;

 

-- 007. WHERE절 배우기 (1 - 숫자 데이터 검색)

-- 월급이 3000인 사원들의 이름, 월급, 직업을 출력해보겠습니다.

SELECT ename, sal, job

FROM emp

WHERE sal = 3000;

 

-- 월급이 3000 이상인 사원들의 이름과 월급을 출력하는 SQL 문장을 작성하면 다음과 같습니다.

SELECT ename AS 이름, sal AS 월급

FROM emp

WHERE sal >= 3000;

 

-- 08. WHERE절 배우기 (2 - 문자와 날짜 검색)

-- 이름이 SCOTT인 사원의 이름, 월급, 직업, 입사일, 부서 번호를 출력해 보겠습니다.

SELECT ename, sal, job, hiredate, deptno

FROM emp

WHERE ename = 'SCOTT';

 

-- 81년 11월 17일에 입사한 사원의 이름과 입사일을 출력합니다.

SELECT ename, hiredate

FROM emp

WHERE hiredate = '81/11/17';

 

-- 현재 접속한 세션의 날짜 형식은 NLS_SESSION_PARAMETERS

SELECT *

FROM NLS_SESSION_PARAMETERS

WHERE PARAMETER = 'NLS_DATE_FORMAT';

 

-- ALTER SESSION명령어는 현제 내가 접속한 세션의 파라미터를 변경하는 명령어입니다.

-- 세션이란 데이터베이스 유저로 로그인해서 로그아웃할 때까지의 한 단위를 말합니다.

-- 바로 이 세션의 파라미터인 NLS_DATE_FORMAT은 현재 세션에서만 유효한 파라미터입니다. SCOTT으로 접속한 상태라면 다시 로그아웃을 했다가 접속하면 NLS_DATE_FORMAT은 RR/MM/DD인 기본값으로 복귀되어 세팅됩니다.

ALTER SESSION SET NLS_DATE_FORMAT = 'RR/MM/DD';

 

-- 09. 산술 연산자 배우기(*,/,+,-)

-- 연봉이 3600 이상인 사원들의 이름과 연봉을 출력해 보겠습니다.

SELECT ename, sal*12 AS 연봉

FROM emp

WHERE sal*12 >= 36000;

 

-- 부서 번호가 10번인 사원들의 이름, 월급, 커미션, 월급 + 커미션을 출력하는 SQL입니다.

SELECT ename, sal, comm, sal + comm

FROM emp

WHERE deptno = 10;

 

-- 커미션을 NULL이 아닌 숫자로 변경해주어야 월급 + 커미션 값이 출력될 수 있습니다.

-- NVL은 NULL 데이터를 처리하는 함수입니다.

SELECT ename, sal, comm, sal + nvl(comm, 0)

FROM emp

WHERE deptno = 10;

 

-- 10~12. 비교 연산자 배우기

-- 월급이 1200 이하인 사원들의 이름과 월급, 직업, 부서 번호를 출력해 보겠습니다.

SELECT ename, sal, job, deptno

FROM emp

WHERE sal <= 1200;

 

-- 월급이 1000에서 3000 사이인 사원들의 이름과 월급을 출력해 보겠습니다.

-- BETWEEN 하한값 AND 상한값 순으로 작성해야 검색이 됩니다.

SELECT ename, sal

FROM emp

WHERE sal BETWEEN 1000 AND 3000;

 

SELECT ename, sal

FROM emp

WHERE (sal >= 1000 AND sal <= 3000);

 

-- 다음의 쿼리는 월급이 1000에서 3000사이가 아닌 사원들의 이름과 월급을 조회합니다.

SELECT ename, sal

FROM emp

WHERE sal NOT BETWEEN 1000 AND 3000;

 

SELECT ename, sal

FROM emp

WHERE (sal < 1000 OR 3000 > sal);

 

-- 1982년도에 입사한 사원들의 이름과 입사일을 조회하는 쿼리입니다.

SELECT ename, hiredate

FROM emp

WHERE hiredate BETWEEN '82/01/01' AND '82/12/31';

 

-- 이름의 첫 글자가 S로 시작하는 사원들의 이름과 월급을 출력해 보겠습니다.

-- 와일드 카드는 이 자리에 어떠한 철자가 와도 상관없고 철자의 개수가 몇 개가 되든 관계없다는 뜻입니다.

-- %는 와일드 카드(Wild Card)라고 합니다. 이퀄 연산자(=)가 아닌 LIKE 연산자를 사용해야 합니다.

SELECT ename, sal

FROM emp

WHERE ename LIKE 'S%';

 

-- 이름의 두 번째 철자가 M인 사원의 이름을 출력합니다.

-- 언더바(_)는 어떠한 철자가 와도 관계없으나 자리수는 한 자리여야 된다는 의미입니다.

SELECT ename

FROM emp

WHERE ename LIKE '_M%';

 

-- 이름의 끝 글자가 'T'로 끝나는 사원들의 이름을 출력합니다.

SELECT ename

FROM emp

WHERE ename LIKE '%T';

 

-- 이름에 A를 포함하고 있는 사원들의 이름을 출력합니다.

SELECT ename

FROM emp

WHERE ename LIKE '%A%';

 

-- 13. 비교 연산자 배우기 (IS NULL)

-- 커미션이 NULL인 사원들의 이름과 커미션을 출력해 보겠습니다.

SELECT ename, comm

FROM emp

WHERE comm IS NULL;

 

-- 14. 비교 연산자 배우기 (IN)

-- 직업이 SALESMAN, ANALYST, MANAGER인 사원들의 이름, 월급, 직업을 출력해 보겠습니다.

SELECT ename, sal, job

FROM emp

WHERE job in ('SALESMAN', 'ANALYST', 'MANAGER');

 

SELECT ename, sal, job

FROM emp

WHERE (job = 'SALESMAN' or job ='ANALYST' or job = 'MANAGER');

 

SELECT ename, sal, job

FROM emp

WHERE job NOT in ('SALESMAN', 'ANALYST', 'MANAGER');

 

SELECT ename, sal, job

FROM emp

WHERE (job != 'SALESMAN' and job != 'ANALYST' and job != 'MANAGER');

 

-- 15. 논리 연산자 배우기 (AND, OR, NOT)

-- 직업이 SALESMAN이고 월급이 1200 이상인 사원들의 이름, 월급, 직업을 출력해 보겠습니다.

SELECT ename, sal, job

FROM emp

WHERE job = 'SALESMAN' and sal >= 1200;

728x90
반응형
LIST
728x90
반응형
SMALL

1. 클래스 - 데이터와 함수의 결합

 

변수 - 하나의 데이터를 저장할 수 있는 공간

배열 - 같은 종류의 여러 데이터를 하나의 집합으로 저장할 수 있는 공간

구조체 - 서로 관련된 여러 데이터를 종류에 관계없이 하나의 집합으로 저장할 수 있는 공간

클래스 - 데이터와 함수의 결합(구조체 + 함수)

 

변수와 함수를 하나의 클래스에 정의하여 서로 관계가 깊은 변수와 함수들을 함께 다룰 수 있게 했다.

 

2. 클래스 - 사용자정의 타입(user-defined type)

자바에서는 클래스가 곧 사용자 정의 타입이다.

// 시간, 분, 초 변수 선언
int hour;
int minute;
float second;

// 3개의 변수 선언
int hour1, hour2, hour3;
int minute1, minute2, minute3;
float second1, second2, second3;

// 배열로 선언
int[] hour = new int[3];
int[] minute = new int[3];
float[] seconde = new float[3];

// 관련된 변수들을 구조체 클래스에 모아서 선언
class Time {
    int hour;
    int minute;
    float second;
}
728x90
반응형
LIST

'Java의 정석' 카테고리의 다른 글

열거형 - 열거형 멤버 추가하기  (3) 2024.10.14
열거형  (3) 2024.10.14
객체 배열  (0) 2023.09.08
클래스와 객체의 정의와 용도  (0) 2023.09.08
객체지향언어  (0) 2023.09.08
728x90
반응형
SMALL

많은 수의 객체를 다뤄야할 때, 배열로 다루면 편리할 것이다. 객체 역시 배열로 다루는 것이 가능하며, 이를 '객체 배열'이라고 한다. 그렇다고 객체 배열 안에 객체가 저장되는 것은 아니고, 객체의 주소가 저장된다. 사실 객체 배열은 참조변수들을 하나로 묶은 참조 변수 배열일 것이다.

Ty[] tvArr = new Tv[3]; // 참조변수 배열(객체 배열)을 생성

// 객체를 생성해서 배열의 각 요소에 저장
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();

// 배열의 초기화 블럭을 사용하면, 다음과 같이 한줄로 간단히 할 수 있다.
Tv[] tvArr = { new Tv(), new Tv(), new Tv() };

// 다뤄야할 객체의 수가 많을 때는 for문을 사용하면 된다.
Tv[] tvArr = new Tv[100];
for(int i=0; i<tvArr.length; i++) {
	tvArr[i] = new Tv();
}

 

728x90
반응형
LIST

'Java의 정석' 카테고리의 다른 글

열거형  (3) 2024.10.14
클래스의 또 다른 정의  (0) 2023.09.08
클래스와 객체의 정의와 용도  (0) 2023.09.08
객체지향언어  (0) 2023.09.08
상수와 리터럴  (0) 2023.09.07
728x90
반응형
SMALL

클래스의 정의와 용도는 다음과 같다.

 

클래스의 정의 - 객체를 정의해 놓은 것이다.

클래스의 용도 - 객체를 생성하는데 사용된다.

 

객체의 정의 - 실제로 존재하는 것. 사물 또는 개념

프로그래밍에서의 객체 - 클래스에 정의된 내용대로 메로리에 생성된 것을 뜻한다.

728x90
반응형
LIST

'Java의 정석' 카테고리의 다른 글

클래스의 또 다른 정의  (0) 2023.09.08
객체 배열  (0) 2023.09.08
객체지향언어  (0) 2023.09.08
상수와 리터럴  (0) 2023.09.07
변수의 타입  (0) 2023.09.07
728x90
반응형
SMALL

객체지향 프로그래밍은 정해진 규칙들을 이용해서 코드 간에 서로 관계를 맺어 유기적으로 프로그램을 구성하는 것이다.

객체지향언어의 주요특징은 다음과 같다.

 

1. 코드의 재사용성이 높다.

새로운 코드를 작성할 대 기존의 코드를 이용하여 쉽게 작성할 수 있다.

 

2. 코드의 관리가 용이하다.

코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.

 

3. 신뢰성이 높은 프로그래밍을 가능하게 한다.

제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다.

 

객체지향 프로그래밍은 프로그래머에게 거시적 관점에서 설계할 수 있는 능력을 요구하기 때문에 객체지향개념을 이해했다 하더라도 자바의 객체지향적 장점들은 충분히 활용한 프로그램을 작성하기란 쉽지 않을 것이다. 일단 프로그램을 기능적으로 완성한 다음 어떻게 하면 보다 객체지향적으로 코드를 개선할 수 있을지를 고민하여 점차 개선해 나가는 것이 좋다.

 

 

728x90
반응형
LIST

'Java의 정석' 카테고리의 다른 글

객체 배열  (0) 2023.09.08
클래스와 객체의 정의와 용도  (0) 2023.09.08
상수와 리터럴  (0) 2023.09.07
변수의 타입  (0) 2023.09.07
변수의 명명규칙  (0) 2023.09.07
728x90
반응형
SMALL

'상수(constant)'는 변수와 마찬가지로 '값을 저장할 수 있는 공간'이지만, 변수와 달리 한번 값을 저장하면 다른 값으로 변경할 수 없다. 상수를 선언하는 방법은 변수와 동일하며, 단지 변수의 타입 앞에 키워드 'final'을 붙여주기만 하면 된다.

그리고 상수는 반드시 선언과 동시에 초기화해야 하며, 그 후 부터는 상수의 값을 변경하는 것이 허용되지 않는다.

final int MAX_SPEED; 		// 에러. 상수는 선언과 동시에 초기화해야함
final int MAX_VALUE = 100;  // OK. 선언과 동시에 초기화했음
MAX_VALUE = 200;            // 에러. 상수의 값은 변경할 수 없음

 

변수(variable) - 하나의 값을 저장하기 위한 공간

상수(constant) - 값을 한번만 저장할 수 있는 공간

리터럴(literal) - 그 자체로 값을 의미하는 것

 

상수가 필요한 이유

그냥 리터럴을 직접 쓰면 될 텐데, 굳이 상수가 따로 필요한가?라는 의문이 들 것도 같다.

int triangleArea = (20 * 10) / 2;	// 삼각형의 면적을 구하는 공식
int rectangleArea = 20 * 10 ;		// 사각형의 면적을 구하는 공식

----------------------------------

final int WIDTH = 20;	// 폭
final int HEIGHT = 10;	// 높이

int triangleArea = (WIDTH * HEIGHT) / 2;	// 삼각형의 면적을 구하는 공식
int rectangleArea = WIDTH * HEIGHT ;		// 사각형의 면적을 구하는 공식

상수를 이용해서 기존의 코드를 변경한 것인데, 이전 코드에 비해 면적을 구하는 공식의 의미가 명확해졌다.

그리고 다른 값으로 계산할 때도 여러 곳을 수정할 필요없이 상수의 초기화만 다른 값으로 해주면 된다.

728x90
반응형
LIST

'Java의 정석' 카테고리의 다른 글

클래스와 객체의 정의와 용도  (0) 2023.09.08
객체지향언어  (0) 2023.09.08
변수의 타입  (0) 2023.09.07
변수의 명명규칙  (0) 2023.09.07
변수의 초기화  (1) 2023.09.07
728x90
반응형
SMALL

자료형은 크게 '기본형'과 '참조형' 두 가지로 나눌 수 있는데, 기본형 변수는 실제 값을 저장하는 반면, 참조형 변수는 어떤 값이 저장되어 있는 주소(memory address)를 값으로 갖는다. 

 

기본형(primitive type)

- 논리형(boolean), 문자형(char), 정수형(byte,short,int,long), 실수형(float,double)

계산을 위한 실제 값을 저장한다. 모두 8개

 

참조형(reference type)

- 객체의 주소를 저장한다. 8개의 기본형을 제외한 나머지 타입.

 

클래스 이름 변수 이름; // 변수의 타입이 기본형이 아닌 것들은 모두 참조변수이다.

Date today = new Date(); // Date객체를 생성해서, 그 주소를 today에 저장

객체를 생성하는 연산자 new의 결과는 생성된 객체의 주소이다. 이 주소가 대입연산자 '='에 의해서 참조변수 today에 저장되는 것이다.

참조변수는 null 또는 객체의 주소를 값으로 갖으며 참조변수의 초기화는 다음과 같이 한다. null은 어떤 객체의 주소도 저장되어 있지 않음을 뜻한다.

728x90
반응형
LIST

'Java의 정석' 카테고리의 다른 글

객체지향언어  (0) 2023.09.08
상수와 리터럴  (0) 2023.09.07
변수의 명명규칙  (0) 2023.09.07
변수의 초기화  (1) 2023.09.07
변수란  (0) 2023.09.07

+ Recent posts