0. 발사믹 목업과 카카오에서 만든 오븐 목업을 사용한 적 있음. 컴포넌트가 다양하지 않고, 발사믹 목업은 영어에 흑백이라는 단점이 있음.
1. 기획자가 아닌 개발자 입장에서 접근성이나 장벽이 낮은 툴을 검색한 결과 파워포인트의 플러그인으로 파워목업이란 게 있다는 걸 확인.
2. 부트스트랩 느낌의 화면 설계나, 관리자 대시보드 페이지를 만들 때 유용한 Shapes들이 있는 걸 확인. 다만 그것들을 사용하려면(=좀 써보려고 하면) Download More Shapes를 눌러 그 Shapes를 다운받아야 함.
3. 다운받는다고 바로 쓸 수 있는 게 아니었음. 다운받은 테마 중 대부분은 사용할 수 없고, Buy Full Version을 눌러 인당 약 60달러를 (평생 사용) 결제해야 함.
4. 결제가 부담스럽다면 마이크로소프트 MVP 사용자이거나, 파워목업에 대한 소개 및 리뷰가 담긴 블로그를 작성 후 제작자에게 블로그 주소와 이름을 담아 이메일(support@powermockup.com)을 보내면 License Code를 보내준다 하여 이 글을 작성함.
5. 사용 방법: 아래 주소로 들어가 체험판(으로 사용 시 기능이 제한됨)을 다운받아 사용해본다.
0422 HTML - HyperText Markup Language * HyperText: 문서의 링크를 클릭하면 연결된 다른 문서로 이동할 수 있는 기능을 제공하는 텍스트 * Markup: 문서의 어느 부분이 제목이고, 어느 부분이 본문이고, 어느 부분이 링크인지를 표시하기 위해서 특별한 기호(마크업, 태그)이 사용된다. - 웹에서 웹 문서간에 빠르게 이동할 수 있는 문서를 만들 때 사용되는 언어가 HTML이다.
태그 - 태그는 '<'와 '>'로 구성된다. *
- 태그의 이름은 소문자로 적는다. - 태그는 여는 태그와 닫는 태그가 쌍으로 구성된다. * 여는 태그:
* 닫는 태그:
- 여는 태그와 닫는 태그 사이에는 컨텐츠나 다른 태그가 포함될 수 있다. *
html 태그 연습
*
html은 웹 문서를 만들 때 사용되는 언어다.
*
1위방탄소년단
- 태그는 속성을 가질 수 있다. * 속성은 속성명="속성값"으로 구성된다. * - 태그간의 포함관계를 정확하게 표현해야 된다. *
태그안에 다른 태그가 포함될 때는 여는 태그와 닫는 태그의 쌍을 맞춰야 한다.
html의 기본 구조
처음으로 작성하는 html 문서
문서의 제목을 포함한다.
내용을 포함한다.
* : 현재 문서가 html5 작성 규칙에 맞춰서 작성된 웹 문서임을 나타낸다.
* ~ : 웹 문서의 시작과 끝을 나타낸다.
*
~
: 웹브라우저가 웹 문서를 해석하는데 필요한 정보를 입력하는 부분이다.
이 부분에 있는 정보는 실제 문서 내용이 아니기 때문에 화면에 표시되지 않는다.
*
~
: 실제로 웹 브라우저에 표시되는 내용을 포함한다.
우리가 배우는 거의 대부분의 태그는
태그 안에 들어간다.
* : 줄 바꾸기. 콘텐츠를 포함하지 않음. 열자마자 닫는다.
브라우저: html 문서 -> 파싱(해석) -> Document 객체 생성 -> 태그마다 엘리먼트 객체 생성 -> 렌더링 -> 화면에 표시
0423 블록 엘리먼트(block element)와 인라인 엘리먼트(inline element) - html 태그(엘리먼트)는 블록 엘리먼트와 인라인 엘리먼트로 나뉜다. - 블록 엘리먼트는 인라인 엘리먼트로, 인라인 엘리먼트는 블록 엘리먼트로 바꿀 수 있다. - 블록 엘리먼트 - 언제나 새로운 줄에서 시작한다. - 좌우 양쪽으로 최대한 늘어나 가능한 모든 너비를 차지한다. - 폭을 지정할 수 있다. - 블록 엘리먼트 내의 콘텐츠를 왼쪽/오른쪽/가운데 정렬시킬 수 있다. - div, h1 ~ h6, p, table, ul, ol, li, dl, dt, dd, form - 인라인 엘리먼트 - 콘텐츠의 흐름을 끊지 않는다. - 새로운 줄을 만들지 않고, 콘텐츠가 필요한 너비만 차지한다. - span, a, img, strong, em, input, select, textarea, label, button * 인라인 엘리먼트는 단독으로 표시되지 않는다. 인라인 엘리먼트는 블록 엘리먼트 안에 있어야 된다.
div, span 엘리먼트 - 통용 컨테이너 태그(엘리먼트다). - CSS로 꾸미기 전에는 콘텐츠나 레이아웃에 어떤 영향도 주지 않는다. - div 태그 - 블록 엘리먼트다. - div나 다른 블록 엘리먼트, 인라인 엘리먼트들을 콘텐츠로 가진다. - 여러 엘리먼트(태그)를 묶어서 스타일의 지정을 돕는 용도로 사용된다. - 여러 엘리먼트(태그)를 묶어서 특정 영역으로 구분하는 용도로 사용된다. - span 태그 - 인라인 엘리먼트다. - 텍스트 콘텐츠를 묶어서 스타일의 지정을 돕는 용도로 사용된다.
id, class 속성 - 모든 엘리먼트(태그)는 id속성과 class속성을 가질 수 있다. - id 속성은 해당 엘리먼트(태그)를 다른 엘리먼트와 구별하기 위해서 사용한다. * html문서 안에 동일한 id속성값을 갖는 엘리먼트가 없어야 한다. * id 속성값으로 특수문자를 사용할 수 없다.("_"와 "-"는 사용가능하다.) * id 속성값은 문자(영어 대소문자)와 숫자를 사용할 수 있고, 숫자로 시작할 수 없다. - class 속성은 엘리먼트(태그)에 동일한 스타일을 적용할 목적으로 사용한다. * html 문서 안에 동일한 스타일이 적용될 엘리먼트는 동일한 class 속성값을 가지게 한다. * class 속성값은 하나 이상의 값을 가질 수 있다.
VO/DAO 패턴 VO(Value Object) - 데이터 베이스의 한 레코드를 담는 객체 - 필드, 생성자, Getter/Setter 메소드 구성 - 레코드(행)의 개수만큼 생성해서 사용한다. * VO객체, Domain객체, DTO객체, 자바 빈즈라고 부른다.
DAO(Database Access Object) - Database Access 작업을 담당하는 객체 - 추가/삭제/변경/조회 작업과 관련된 메소드들로 구성 * CRUD 기능을 구현한다. * Create, Retrieve(조회), Update, Delete - 업무 로직이 존재하지 않는다. * 단순한 JDBC 코딩만 존재한다. * ibatis/mybatis/hibernate/jpa 등의 DB Access 작업을 단순화시켜주는 프레임워크를 활용해서 주로 개발된다.
Service - 업무 로직을 관련된 작업을 담당하는 객체 - 사용자가 입력한 값을 전달받아서 적절한 업무로직을 수행하고 업무 로직의 수행 결과를 DAO를 활용해서 DB에 영구적으로 보관한다. * 업무 로직은 보통 1번 이상의 DB Access 작업을 필요로 한다. * Service 객체의 메소드들은 DAO에 구현된 DB Access 작업을 실행해서 업무 로직에 필요한 정보를 획득하거나, 업무 로직의 수행 결과를 DB에 반영한다.
무결성 제약 조건 - 테이블에 유효하지 않은 데이터가 저장되는 것을 방지한다. - 테이블에 행이 추가, 갱신, 삭제될 때마다 제약 규칙이 적용된다. - 제약 조건의 종류 not null 제약 조건 해당 컬럼이 null값을 포함하지 못하도록 제약한다(이름). unique 제약 조건(고유키 제약 조건) 해당 컬럼의 값은 테이블의 모든 행에서 고유한 값을 가지는 컬럼 혹은 컬럼의 조합이어야 한다(이메일, 주민번호, 아이디) primary key 제약 조건(기본키 제약 조건) 해당 컬럼이 행을 대표하는 컬럼이 되도록 한다. * null 값을 허용하지 않는다. * 모든 행에 대해서 같이 고유해야 한다. foreign key 제약 조건(외래키 제약 조건) 해당 컬럼의 값이 동일한 테이블이나 다른 테이블의 기본키 혹은 고유키로 지정된 컬럼의 값을 참조하도록 한다 * 참조하는 컬럼의 값들만 저장되게 한다. * not null 제약 조건이 지정되어 있지 않으면 null값도 허용한다. check 제약 조건 * 해당 컬럼의 값이 제시된 조건을 만족하는 값만 저장되도록 지정한다.
0415 트랜잭션 - 데이터의 일관성을 보장하기 위해서 사용한다. - insert, update, delete 구문만 트랜잭션 처리의 대상이다. - 한 개 이상의 단일 작업(DB Access 작업)을 논리적 작업 그룹으로 묶어서 처리한다.
트랜잭션의 시작과 종료 - 트랜잭션의 시작 - 첫 번째 DML(INSERT, UPDATE, DELETE 구문) SQL이 실행될 때 자동으로 시작된다. - 트랜잭션의 종료 - commit 또는 rollback 구문이 실행되면 자동으로 종료된다. - 시스템이 고장난 경우
commit과 rollback - commit은 해당 트랜잭션 내에서 실행된 dml 작업(데이터 변경 작업)을 영구 저장한다. - rollback은 해당 트랜잭션 내에서 실행된 dml 작업의 db 반영을 전부 취소한다.
트랜잭션 특징(ACID) - 원자성: 트랜잭션 내의 작업이 부분적으로 성공하거나 실패하는 것을 허용하지 않는 것. All or Nothing으로 동작 - 일관성: 트랜잭션 내의 작업이 성공적으로 완료되었다면 언제나 일관성 있는 데이터 상태로 유지되는 것. 무결성 제약 조건을 위반하는 (일관성 있는 데이터 상태가 아닌 것) 트랜잭션은 실행될 수 없다. - 고립성: 트랜잭션 수행 시 다른 트랜잭션의 연산이 영향을 미치지 못하도록 하는 것 * 트랜잭션이 종료(완료)되기 전의 중간 상태의 데이터를 외부 트랜잭션이 볼 수 없음 - 지속성: 성공적으로 수행된 트랜잭션의 결과는 데이터베이스에 영구적으로 반영된다.
오라클 데이터베이스 객체 시퀀스: 일련번호 생성기 테이블: 데이터의 저장소 뷰: 가상의 테이블이다. 하나 이상의 테이블을 기반으로 하는 가상의 테이블이고, 자체적인 데이터를 포함하고 있지는 않지만, 테이블과 마찬가지로 뷰를 대상으로 CRUD가 가능하다. * 대부분 뷰를 대상으로는 SELECT만 사용한다. - 뷰를 사용하는 이유: 복잡한 SQL문을 쉽게 작성할 수 있다. 데이터 엑세스를 제한할 수 있다. 동일한 데이터로부터 다양한 결과를 얻을 수 있다. 인덱스: 데이터의 색인 정보를 가지고 있다.
인라인 뷰(Inline View) select ~ from ~ where 컬럼 = (select ~ from ~ where ~) <-- 서브 쿼리
select ~ from (select ~ from ~ where ~) <-- 인라인 뷰 where ~
select ~, (select ~ from ~ where ~) <-- 스칼라 서브 쿼리 from ~ where ~
인라인 뷰 - 메인 쿼리의 from 절에 작성된 서브 쿼리를 말한다. * select문의 실행 결과가 가상의 테이블로 취급된다. * view는 오라클의 데이터베이스 객체이지만, 인라인 뷰는 오라클의 데이터베이스 객체가 아니다. * 메인 쿼리가 실행되는 동안 잠깐 만들어지는 가상의 테이블이다. - Top-N 분석 쿼리에 자주 사용된다. - 인라인 뷰도 조인에 참여할 수 있다.
Top-N 분석 쿼리 - 테이블에서 조건에 맞는 최상위 데이터 n개 또는 최하위 데이터 n개를 조회할 때 사용된다. - 회사에 급여를 가장 많이 받는 직원 3명 - 가장 최근에 입사한 직원 5명 - 한 달 동안 가장 많이 팔린 제품 10가지 - select 컬럼명, 컬럼명 from (select 컬럼명, 컬럼명 from 테이블 order by Top-N 분석 대상_컬럼명) where rownum <= N * rownum은 서브쿼리(인라인뷰)에서 반환되는 각 행에 1부터 시작하는 순번을 할당한다.
분석 함수 - 분석 대상 컬럼의 값을 기준으로 순번 혹은 순위를 부여하는 함수다. * ROW_NUMBER(): 순번을 부여한다. * RANK(): 순위를 부여한다. - Top-N 분석을 수행할 수 있다. - 특정 범위에 속한 행을 찾을 때 유리하다(6~10등). - 페이징 처리에 유용하게 사용되는 함수다. - 사용 방법: SELECT 분석함수() OVER (ODER BY 정렬대상컬럼명 정렬방향) 별칭, 컬럼명, 컬럼명 FROM 테이블명 * 정렬대상 컬럼의 값을 기준으로 행을 정렬한 다음 순번 혹은 순위를 부여한다.
0416 인덱스 - 오라클 데이터베이스 테이블에서 원하는 데이터를 빠르게 찾아갈 수 있도록 만들어진 데이터 구조 - 테이블의 데이터에 대한 색인 정보를 보관하고 있는 객체다. * 인덱스에 보관된 정보 = 데이터 + ROWID(데이터가 저장된 위치 정보) - 인덱스의 생성 자동 생성 인덱스 Primary key, unique 제약 조건이 정의된 컬럼은 자동으로 인덱스가 생성된다. 수동 생성 인덱스 create index 인덱스명 on 테이블명(컬럼명, 컬럼명, ...)
- 인덱스의 삭제 drop index 인덱스명
- 인덱스가 필요한 경우 where절에 검색 조건으로 자주 사용되는 경우 조인 조건으로 자주 사용되는 경우 해당 컬럼에 null값이 많이 포함된 경우 해당 컬럼에 다양한 값이 분포되어 있는 경우 큰 테이블에서 대부분의 조회 조건으로 검색되는 행이 2%~4% 미만인 경우
- rowid 테이블에 저장된 데이터의 위치를 나타내는 주소값이다. 사용자가 임의로 변경할 수 없고, 조회만 할 수 있다. 예시: AAAEAW AAE AAAACt AAA AAAEAW: 데이터베이스 식별을 위한 Data Object Number AAE: 각각의 데이터파일에 할당된 File Number AAAACt: 데이터 블록의 위치를 나타내는 Block Number AAA: 블록 내에 데이터가 저장된 행의 번호 Row Number
사용자 및 권한 관리 사용자 - 데이터베이스 시스템에 접속하고, 데이터베이스 객체를 생성/삭제, 데이터 조작을 할 때 필요한 사용자 계정 - 시스템 권한을 가진 사용자만 사용자를 등록/삭제할 수 있다. 권한(privileges) - 특정 SQL문을 실행할 수 있는 권리 - 시스템 권한 - 데이터베이스 시스템을 사용(액세스)할 수 있는 권한 - 시스템 권한을 가진 사용자만 부여/박탈이 가능하다. - 객체 권한 - 데이터베이스 객체의 내용을 조작할 수 있는 권한 - 해당 객체의 주인(소유자)가 부여/박탈이 가능하다. 롤(role) - 사용자에게 부여할 수 있는 권한들의 집합이다. - 여러 개의 권한을 묶어서 하나의 롤을 정의할 수 있다. * 권한의 부여/박탈이 쉬워진다. - 주로 사용되는 롤 - Connect Role - 오라클에 접속할 수 있는 세션을 생성할 수 있는 권한 - 일반적인 데이터베이스 객체를 생성하거나 조회할 수 있는 권한 - Resource Role - PL/SQL을 사용할 수 있는 권한 * 일반 사용자에게는 Connect, Resource Role을 부여한다. - DBA Role - 모든 시스템 권한이 부여된 Role이다. - 데이터베이스 관리자에게 부여된다.
0417 set 연산자 - 두 개 이상의 조회 결과를 하나로 결합한다. - 연산자 - UNION A UNION B 1 2 3 4 5 6 7 A의 조회 결과와 B의 조회 결과에 포함된 모든 행을 반환한다. 단 A와 B 둘 다에 포함되어 있는 행은 한 번만 선택된다. (A와 B의 합집합을 반환한다. 단 중복된 행은 한 번만) - UNION ALL A UNION ALL B 1 2 3 4 3 4 5 6 7 A의 조회 결과와 B의 조회 결과에 포함된 모든 행을 반환한다. A와 B 모두에 포함된 중복된 행도 모두 반환한다. (A와 B의 합집합을 반환한다. 중복된 행 포함) - INTERSECT A INTERSECT B 3 4 A의 조회 결과와 B의 조회 결과에 공통으로 포함된 행만 반환한다. (A와 B의 교집합을 반환한다.) - MINUS A MINUS B 1 2 A의 조회 결과에서 B의 조회 결과를 뺀 행을 반환한다. (A와 B의 차집합을 반환한다.) - 쿼리 작성 시 주의 사항 - A 쿼리문과 B 쿼리문의 선택된 컬럼의 개수가 동일해야 한다. SELECT 컬럼 1, 컬럼 2 FROM A UNION SELECT 컬럼3, 컬럼7 FROM B - A 쿼리문과 B 쿼리문의 선택된 컬럼의 데이터 타입이 동일해야 한다. - A 쿼리문과 B 쿼리문에서 선택된 컬럼의 이름은 동일하지 않아도 된다. - 정렬을 위한 ORDER BY 절은 맨 마지막 SELECT문에 붙인다.
다중컬럼 서브쿼리 - 서브쿼리가 두 개 이상의 컬럼을 반환하는 경우 사용된다. - SELECT ~ FROM ~ WHERE (컬럼1, 컬럼2) IN (SELECT 컬럼1, 컬럼2 FROM ~ WHERE ~ ) * 컬럼 간의 실제 컬럼명은 다를 수 있다.
스칼라 서브쿼리 - 하나의 행에서 하나의 값(1행 1열)만 반환하는 서브쿼리다. - 오직 하나의 값을 반환하는 서브 쿼리다. - 주로 SELECT절에서 사용된다. * DECODE 및 CASE의 조건 및 표현식 부분 * SELECT문의 모든 절에서 사용 가능하다(GROUP BY 절은 제외) * UPDATE 문의 SET절
상호연관 서브쿼리 - SELECT COLUMN1, COLUMN2 (SELECT COLUMN1 FROM TABLE INNER WHERE INNER.COLUMN3 = OUTER.COLUMN3) FROM TABLE OUTER
- SELECT COLUMN1, COLUMN2, ... FROM TABLE OUTER WHERE COLUMN3 = (SELECT COLUMN1 FROM INNER WHERE INNER.COLUMN4 = OUTER.COLUMN4) - 상호연관 서브쿼리는 OUTER 쿼리의 행이 조회될 때마다 서브쿼리가 실행된다.
데이터 모델링 - 정보 시스템을 구축하기 위한 테이블 관점에서의 업무 분석 기법 - 약속된 표기법으로 표현하는 과정 - 데이터베이스 구축을 위한 분석/설계 과정
데이터 모델링의 모델 종류 - 개념적 데이터 모델: 핵심 엔티티를 선정하고, 앤티티간의 관계를 생성한다. 각 앤티티의 애트리뷰트를 선정한다. - 논리적 데이터 모델: 구축하려는 정보 시스템에 맞게 기본키, 애트리뷰트를 정확하게 표현하는 것 - 물리적 데이터 모델: 실제 데이터베이스에 적용할 수 있도록 테이블, 컬럼, 데이터 타입 등을 고려해서 설계한 것
앤티티 - 업무에 필요한 정보를 저장하는 것 - 영구적으로 존재하는 데이터인 경우 - 누가 봐도 정확하게 구분되는 데이터 집합인 경우 앤티티의 종류 - Key entity, Main entity, Action entity, Child entity 속성(Attributes) - 앤티티가 가지는 특징 - 앤티티를 구성하는 값 - 앤티티에서 관리하고자 하는, 더 이상 분리되지 않는 데이터의 최소 단위 관계(Relation) - 두 개의 앤티티 사이의 논리적인 관계 - 관계는 분포도, 존재 유무, 방향으로 구성된다. * 관계 = 분포도(O, <) + 존재유무(|) + 방향(─) 브릿지 테이블
0418 계층형 쿼리 - 테이블에 저장된 데이터가 상위 계층과 하위 계층의 관계를 가지고 있을 때 오라클에서는 start with와 connect by를 이용해서 상위->하위, 하위->상위로 데이터를 조회할 수 있다. - 형식 select level, 컬럼명, 컬럼명, ... from table where 조건식 start with 계층의 시작점(시작행)을 지정합니다. connect by 검색 방향을 지정 * connect by prior 부모행의 키 = 자식행의 키 <-- 부모에서 자식으로 트리 구성 * connect by prior 자식행의 키 = 부모행의 키 <-- 자식에서 부모로 트리 구성 * level은 계층형 쿼리에서 수행 결과의 depth를 표현하는 의사 컬럼이다. - 계층형 쿼리의 실행 순서 select level, 컬럼명, 컬럼명, ... 5 from table 1 where 조건식 4 start with 계층의 시작점(시작행)을 지정합니다. 2 connect by 검색 방향 3
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="../resources/jquery/jquery.min.js"></script>
</head>
<body>
<div id="page">
<h1 id="header">목록</h1>
<h2>구입물품 목록</h2>
<ul>
<li id="one" class="hot"><em>따뜻한 </em>라떼</li>
<li id="two" class="cold">냉동만두</li>
<li id="three" class="cold">우유</li>
<li id="four" class="hot">피자</li>
</ul>
</div>
<script type="text/javascript">
// jQuery 기본 선택자
// 1. 전체 선택자
// $("*") : html 문서 내의 모든 엘리먼트를 선택한다.
$("*").css("color", "lightgreen");
// 2. 태그 선택자
// $("태그명") : html 문서에서 태그명에 해당하는 모든 엘리먼트를 선택한다.
$("h1").css("color", 'red');
$("li").css('color', "maroon");
// 3. 아이디 선택자
// $("#아이디") : html 문서에서 아이디에 해당하는 첫 번째 엘리먼트를 선택한다.
$('#one').css('background-color', 'lightgrey');
$('#three').css('background-color', 'orange');
// 4. 클래스 선택자
// $(".클래스") : html 문서에서 class 속성값이 지정된 클래스를 포함하고 있는 모든 엘리먼트를 선택한다.
$(".hot").css("border", '2px solid red').css("padding", '10px');
// 5. 다중 선택자
// $("선택자, 선택자") : html 문서에서 제시된 각각의 선택자에 해당하는 모든 엘리먼트를 선택한다.
$(".cold, h2").css('border', '2px solid blue');
// 6. 필터링하기
// $(선택자1선택자2) :선택자1로 선택된 엘리먼트 중에서 선택자2에 해당하는 것만 선택한다.
$('li.cold') // li이면서 클래스가 cold인 엘리먼트 선택 --> 2개 선택됨
$('ul.cold') // ul이면서 cold인 엘리먼트 선택 --> 선택된 엘리먼트 없음
// $('').css();
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jQuery 연습</title>
<script type="text/javascript" src="../resources/jquery/jquery.min.js"></script>
</head>
<body>
<h1>뉴스</h1>
<div id="breaking-news">
<h3>속보</h3>
<ul id="breaking-news-box">
<li>전세계에 좀비 바이러스 창궐</li>
<li>주요국 지도자들 지하벙커로 피신</li>
<li>전 지구적인 교통망, 통신망 회생 불가능 상태로 파괴</li>
</ul>
</div>
<div id="news-box">
<h3>주요 뉴스</h3>
<div class="box">
<h3>스포츠 뉴스</h3>
<ul id="sports-box">
<li>누구누구 무슨무슨 상 수상</li>
<li>U-20 월드컵 한국 결승 진출</li>
<li>누구누구 피파 올해의 선수상 수상</li>
</ul>
</div>
<div class="box">
<h3>연예 뉴스</h3>
<ul id="ent-box">
<li>그룹 누구누구 멤버간 불화로 해체</li>
<li>누구누구 개인 회생 신청</li>
<li>누구누구 그래미상 주요 부문 모두 수상</li>
</ul>
</div>
</div>
<div id="movie-box">
<h3>영화 뉴스</h3>
<div class="box">
<h3>개봉영화</h3>
<ul id="ranking-box">
<li>1위, 기생충</li>
<li>2위, 알라딘</li>
<li>3위, X맨, 다크 피닉스</li>
</ul>
</div>
</div>
<script type="text/javascript">
// 계층 선택자
// 1. 자손 선택자(하위 선택자)
// $("선택자1 선택자2") : 선택자1의 하위 엘리먼트 중에서 선택자2에 해당하는 엘리먼트를 선택한다.
// 속보만 빨갛게 표시하기
// id="breaking-news-box"인 ul 하위의 li를 선택한다.
$('#breaking-news-box li').css('color', 'red');
// 주요 뉴스, 스포츠 뉴스, 연예 뉴스 제목을 파랗게 표시하기
$("#news-box h3").css('color', 'blue');
// 2. 자식 선택자
// $("선택자1 > 선택자2") : 선택자1의 자식 엘리먼트 중에서 선택자2에 해당하는 엘리먼트를 선택한다.
// 주요 뉴스 제목만 밑줄 표시하기
// id="breaking-news-box"의 자식 엘리먼트 h3 찾기
$('#news-box > h3').css("text-decoration", "underline");
// 3. 동생 선택자(next 선택자)
// $("선택자1 + 선택자2") : 선택자1의 엘리먼트 바로 다음에 오는 엘리먼트가 선택자2에 해당할 때 선택한다.
// 주요 뉴스 중에서 스포츠 뉴스 관련 div를 선택해서 테두리 표시하기
// id="news-box"의 자식 엘리먼트 h3과 인접한 div 찾기
$("#news-box > h3 + div").css('border', "3px solid red");
// 4. 동생들 선택자
// $("선택자1 ~ 선택자2") : 선택자1의 동생 엘리먼트들 중에서 선택자2에 해당하는 엘리먼트를 모두 선택한다.
// $("선택자1 ~ 선택자2") : 선택자1의 동생 엘리먼트들 중에서 선택자2에 해당하는
// 스포츠 뉴스와 연예 뉴스에만 배경색 넣기
// id="news-box"인 엘리먼트의 하위 엘리먼트 중에서 div를 찾아서 배경색 넣기
$("#news-box div").css("background-color", 'yellow');
// id="news-box"인 엘리먼트의 하위 엘리먼트 중에서 클래스가 box인 엘리먼트를 찾아서 배경색 넣기
$("#news-box .box").css('background-color', 'yellow');
// id="news-box"의 자식 엘리먼트 h3의 동생들 중에서 div를 찾아서 배경색 넣기
$("#news-box > h3 ~ div").css('background-color', 'yellow');
// id="news-box"의 자식 엘리먼트 h3의 동생들 중에서 클래스가 box인 엘리먼트를 찾아서 배경색 넣기
$("#news-box > h3 ~ .div").css('background-color', 'yellow');
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jQuery 연습</title>
<script type="text/javascript" src="../resources/jquery/jquery.min.js"></script>
</head>
<body>
<h1>뉴스</h1>
<div id="breaking-news">
<h3>속보</h3>
<ul id="breaking-news-box">
<li>전세계에 좀비 바이러스 창궐</li>
<li>주요국 지도자들 지하벙커로 피신</li>
<li>전 지구적인 교통망, 통신망 회생 불가능 상태로 파괴</li>
</ul>
</div>
<div id="news-box">
<h3>주요 뉴스</h3>
<div class="box">
<h3>스포츠 뉴스</h3>
<ul id="sports-box">
<li>누구누구 무슨무슨 상 수상</li>
<li>U-20 월드컵 한국 결승 진출</li>
<li>누구누구 피파 올해의 선수상 수상</li>
</ul>
</div>
<div class="box">
<h3>연예 뉴스</h3>
<ul id="ent-box">
<li>어떤 그룹 멤버간 불화로 해체</li>
<li>누구누구 개인 회생 신청</li>
<li>누구누구 그래미상 주요 부문 모두 수상</li>
</ul>
</div>
</div>
<div id="movie-box">
<h3>영화 뉴스</h3>
<div class="box">
<h3>개봉영화</h3>
<ul id="ranking-box">
<li>1위, 기생충</li>
<li>2위, 알라딘</li>
<li>3위, X맨, 다크 피닉스</li>
</ul>
</div>
</div>
<div id="movie-list-box">
<table id="movie-table" style="border: 1px solid black; width: 100%">
<thead>
<tr>
<th>순위</th>
<th>제목</th>
<th>개봉일</th>
<th>관객수</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>기생충</td>
<td>6.10</td>
<td>5,000,000</td>
</tr>
<tr>
<td>2</td>
<td>알라딘</td>
<td>6.5</td>
<td>1,000,000</td>
</tr>
<tr>
<td>3</td>
<td>다크 피닉스</td>
<td>5.26</td>
<td>800,000</td>
</tr>
<tr>
<td>4</td>
<td>맨인블랙</td>
<td>6.12</td>
<td>4,000</td>
</tr>
<tr>
<td>5</td>
<td>맨인블랙</td>
<td>6.12</td>
<td>4,000</td>
</tr>
<tr>
<td>6</td>
<td>맨인블랙</td>
<td>6.12</td>
<td>4,000</td>
</tr>
<tr>
<td>7</td>
<td>맨인블랙</td>
<td>6.12</td>
<td>4,000</td>
</tr>
<tr>
<td>8</td>
<td>맨인블랙</td>
<td>6.12</td>
<td>4,000</td>
</tr>
</tbody>
</table>
</div>
<script type="text/javascript">
// 기본 필터 선택자
// 1. 첫 번째 요소 선택자
// $('선택자:first')
$("li:first").css("color", 'red');
// 2. 마지막 요소 선택자
// $('선택자:last')
$("li:last").css('color', 'red');
// 3. 홀수 번째 요소 선택자
// $('선택자:odd')
$('li:odd').css('background-color', 'yellow');
// 4. 짝수 번째 요소 선택자
// $('선택자:even')
$('li:even').css('background-color', '#ddd');
// 5. 지정된 인덱스번째 요소 선택자
// $('선택자:eq(인덱스)') *인덱스는 0부터 시작
$('#sports-box li:first').css('border', '2px solid green');
$('li:eq(2)').css("font-size", '25px');
// <li> 2위, 알라딘 </li>을 매진처리하기
$('#ranking-box li:eq(1)').css('text-decoration', 'line-through');
// 6. 지정된 인덱스번째의 이전 요소들 선택자
// $('선택자:lt(인덱스)') *인덱스는 0부터 시작
// 영화순위가 1, 2, 3위 tr를 선택해서 글자를 빨갛게 표시하기
$('#movie-table tbody tr:lt(3)').css('color', 'red');
// 7. 지정된 인덱스번째의 이후 요소들 선택자
// $('선택자:gt(인덱스)') *인덱스는 0부터 시작
// 영화 순위가 4, 5, 6, 7, 8위 tr를 선택해서 글자를 흐리게 표시하기
$('#movie-table tbody tr:gt(3)').css('color', 'grey');
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jQuery 연습</title>
<script type="text/javascript" src="../resources/jquery/jquery.min.js"></script>
</head>
<body>
<h1>사이트 목록</h1>
<div id="sns-box">
<h3>SNS 사이트</h3>
<ul>
<li><a href="https://www.instagram.com" title="사진공유">인스타그램</a></li>
<li><a href="https://www.facebook.com/" title="일상, 사진공유">페이스북</a></li>
<li><a href="https://twitter.com" title="소식 공유">트위터</a></li>
<li><a href="https://www.kakaostory.co.kr" title="한국의 sns">카카오스토리</a></li>
</ul>
</div>
<div id="search-site-box">
<h3>검색 사이트</h3>
<ul>
<li><a href="https://www.google.com" title="최대 검색 사이트">구글</a></li>
<li><a href="https://www.daum.net" title="국내 2위 업체">다음</a></li>
<li><a href="https://www.naver.com" title="국내 1위 업체">네이버</a></li>
<li><a href="https://www.yahoo.com" title="일본 최대 검색 사이트">야후</a></li>
</ul>
</div>
<h3>새 사이트 등록</h3>
<form action="">
<label>사이트 주소</label> <input type="text" name="siteurl"><br />
<label>사이트 이름</label> <input type="text" name="sitename" id="sitename"><br />
<label>사이트 종류</label> <input type="checkbox" name="sitetype" id="ck-1"> sns
<input type="checkbox" name="sitetype" id="ck-2"> 검색
<input type="checkbox" name="sitetype" id="ck-3"> 커뮤니티
<input type="checkbox" name="sitetype" id="ck-4"> 웹툰
<input type="checkbox" name="sitetype" id="ck-5"> 포탈<br />
<label>사이트 소개</label> <textarea rows="5" cols="60" name="desc"></textarea><br />
<button type="submit">등록</button>
</form>
<script type="text/javascript">
// 속성 선택자
// 1. 지정된 속성을 가지고 있는 요소를 선택
// #('[속성명]')
// title 속성을 가지고 있는 요소를 선택하기
$("[title]").css('background-color', 'lightgreen');
// 2. 지정된 속성/속성값이 일치하는 요소를 선택
// $("[속성명='속성값']")
// 타입 속성이 text인 것 선택
$("[type='text']").css('border', '2px dashed red');
// href 속성이 https://www.daum.net인 것 선택
$("[href='https://www.daum.net']").css('font-size', '30px');
// 타입속성이 checkbox인 것 선택
$("[type='checkbox']").prop("checked", true);
// name 속성이 sitetype인 것 중에서 첫 번째 것 선택
$("[name='sitetype']:first").prop("checked", true);
// 3. 속성이 지정된 속성값으로 시작하는 요소를 선택
// $("[속성명^='속성값']")
// 검색 사이트 중에서 국내 검색 사이트 검색
// title의 속성값이 "국내"로 시작하는 것 검색
$("#search-site-box [title^='국내']").css("border", '2px dashed maroon');
// 4. 속성이 지정된 속성값으로 끝나는 요소를 선택
// $("[속성명$='속성값']")
// 링크의 주소값이 'com'으로 끝나는 것 검색
$("a[href$='com']").css('color', 'white');
// 5. 속성이 지정된 속성값을 포함하고 있는 요소를 선택
// $("[속성명*='속성값']")
$("[title*='공유']").css('font-size', '9px');
// 6. 속성이 지정된 속성값을 분리된 단어로 포함하고 있는 요소를 선택
// $("[속성명~='속성값']")
$("[title~='공유']").css('padding-right', '200px');
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jQuery 연습</title>
<script type="text/javascript" src="../resources/jquery/jquery.min.js"></script>
</head>
<body>
<h1>jQuery 연습</h1>
<div id="singer-box">
<h3>좋아하는 가수</h3>
<ul>
<li>마왕</li>
<li>악동뮤지션</li>
<li>신승훈</li>
<li>에픽하이</li>
</ul>
</div>
<div class="fruit-box">
<h3>좋아하는 과일</h3>
<ul>
<li>딸기</li>
<li>방울토마토</li>
<li>참외</li>
<li>수박</li>
<li>매론</li>
</ul>
</div>
<div id="food-box">
<h3>좋아하는 음식</h3>
<ul>
<li>초밥</li>
<li>닭가슴살</li>
<li>미역국</li>
<li>목살</li>
</ul>
</div>
<div id="snack-box">
<h3>좋아하는 과자</h3>
<ul>
<li>시장에서 파는 오감자같이 생긴 거</li>
<li>고구마 말랭이 같이 생긴 거</li>
<li>동부</li>
<li>몽쉘</li>
<li>참깨스틱</li>
<li>빠다코코넛</li>
<li>아이비</li>
<li>맛동산</li>
<li>김과자</li>
</ul>
</div>
<script type="text/javascript">
// 자식요소 선택자
// 1. 부모 요소의 첫 번째 자식을 선택한다.
// $("선택자:first-child") : 선택자로 선택된 엘리먼트 중에서 부모의 첫 번째 자식인 것만 선택한다.
// 2. 부모 요소의 마지막 번째 자식을 선택한다.
// $("선택자:last-child") : 선택자로 선택된 엘리먼트 중에서 부모의 마지막 번째 자식인 것만 선택한다.
// 3. 부모 요소의 n 번째 자식을 선택한다.
// $("선택자:nth-child(n)") : 선택자로 선택된 엘리먼트 중에서 부모의 n번째 자식인 것만 선택한다.
// * n은 1부터 시작한다.
// 모든 li 중에서 첫 번째 것 찾기
$("li:first").css('background-color', 'yellow');
// 모든 li 중에서 마지막 번째 것 찾기
$("li:last").css('background-color', 'lightgreen');
// 모든 li 중에서 2번째 것 찾기
$("li:eq(1)").css('background-color', 'pink');
// 모든 li 중에서 부모의 첫 번째 자식 찾기
$("li:first-child").css('font-size', '30px');
// 모든 li 중에서 부모의 마지막 번째 자식인 것 찾기
$("li:last-child").css('font-size', '8px');
// 모든 li 중에서 부모의 2번째 자식인 것 찾기
$("li:nth-child(2)").css('font-size', '50px');
// 1번째, 4번째, 7번째 과자 선택
$("#snack-box li:nth-child(3n+1)").css('color', 'red');
</script>
</body>
</html>
package demo.set;
import java.util.HashSet;
import java.util.Iterator;
public class HashSetDemo1 {
public static void main(String[] args) {
HashSet<String> names = new HashSet<String>();
names.add("홍길동");
names.add("김유신");
names.add("강감찬");
names.add("홍길동");
names.add("이순신");
names.add("유관순");
Iterator<String> it = names.iterator();
while (it.hasNext()) {
String name = it.next();
System.out.println(name);
}
System.out.println();
names.clear();
System.out.println("비어 있는가? " + names.isEmpty());
System.out.println("저장된 개수 : " + names.size());
for (String name : names) {
System.out.println(name);
}
}
}
package demo.set;
import java.util.HashSet;
public class HashSetDemo2 {
public static void main(String[] args) {
// Contact에서 hashCode()와 equals() 메소드를 재정의해서
// 객체가 달라도 번호가 동일하면 동일한 객체로 간주하도록 만들었다.
Contact contact1 = new Contact(10, "홍길동", "010-1111-1111");
Contact contact2 = new Contact(20, "김유신", "010-2222-1111");
Contact contact3 = new Contact(10, "홍길동", "010-1111-1111");
Contact contact4 = new Contact(40, "이순신", "010-4444-1111");
HashSet<Contact> contacts = new HashSet<Contact>();
contacts.add(contact1);
contacts.add(contact2);
contacts.add(contact3);
contacts.add(contact4);
contacts.add(contact1);
contacts.add(contact2);
System.out.println(contacts);
}
}
package demo.set;
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
TreeSet<String> names = new TreeSet<String>();
names.add("이순신");
names.add("김유신");
names.add("강감찬");
names.add("홍길동");
names.add("유관순");
names.add("김구");
for (String name : names) {
System.out.println(name);
}
}
}
package demo.set;
import java.util.Random;
import java.util.TreeSet;
public class TreeSetDemo2 {
public static void main(String[] args) {
TreeSet<Integer> lotto = new TreeSet<Integer>();
Random random = new Random();
while (true) {
int number = random.nextInt(45) + 1;
lotto.add(number);
if (lotto.size() == 6) {
break;
}
}
System.out.println(lotto);
}
}
package demo.set;
public class Contact {
private int no;
private String name;
private String tel;
public Contact() {}
public Contact(int no, String name, String tel) {
super();
this.no = no;
this.name = name;
this.tel = tel;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
@Override
public String toString() {
return "Contact [no=" + no + ", name=" + name + ", tel=" + tel + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + no;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Contact other = (Contact) obj;
if (no != other.no)
return false;
return true;
}
}
package demo.list;
import java.util.ArrayList;
public class ArrayListDemo1 {
public static void main(String[] args) {
ArrayList<String> names = new ArrayList<String>();
// 객체 저장하기
// boolean add(E e)
names.add("홍길동"); //names[0] = "홍길동";
names.add("김유신"); //names[1] = "김유신";
names.add("강감찬"); //names[2] = "강감찬";
names.add("이순신"); //names[3] = "이순신";
names.add("유관순"); //names[4] = "유관순";
names.add("유관순"); //names[4] = "유관순";
names.add("유관순"); //names[4] = "유관순";
System.out.println(names);
// 지정된 위치의 객체 삭제
// E remove(int index)
names.remove(2); // 강감찬 삭제
// 지정된 객체를 삭제
// boolean remove(Object o)
names.remove("유관순"); // 유관순 삭제
// 지정된 인덱스에 저장된 객체 꺼내기
// E get(int index)
String value1 = names.get(0);
System.out.println("0번째 저장된 객체: " + value1);
// ArrayList에 저장된 모든 객체 꺼내기
// enhanced for문 사용
for (String x : names) {
System.out.println(x);
}
// int size()
// 저장된 객체의 개수를 반환
int len = names.size();
System.out.println("저장된 객체의 개수: " + len);
// void clear()
// 저장된 객체 전체 삭제
names.clear();
// boolean isEmpty()
boolean empty = names.isEmpty();
System.out.println("비어있는가? " + empty);
}
}
package demo.list;
import java.util.ArrayList;
public class ArrayListDemo2 {
public static void main(String[] args) {
// 기본 자료형을 저장하는 ArrayList
// 기본 자료형을 저장할 때는 제네릭 타입을 Wrapper 클래스 타입으로 지정한다.
// int --> Integer, double --> Double, long --> Long, ...
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(new Integer(20));
numbers.add(40); // 오토 박싱 --> numbers.add(new Integer(40))
for (Integer x : numbers) {
System.out.println(x);
}
for (int x : numbers) {
System.out.println(x);
}
ArrayList<Double> scores = new ArrayList<Double>();
}
}
package demo.list;
import java.util.ArrayList;
public class ArrayListDemo3 {
public static void main(String[] args) {
// 객체를 저장하는 ArrayList
ArrayList<Book> books = new ArrayList<Book>();
Book book1 = new Book(100, "이것이 자바다", "신용권", "한빛미디어", 30000);
Book book2 = new Book(200, "데이터베이스 개론", "홍길동", "한빛미디어", 29000);
Book book3 = new Book(300, "자바 디자인 패턴", "켄트벡", "인사이트", 32000);
Book book4 = new Book(400, "인사이트 자바스크립트", "김유신", "한빛미디어", 27000);
books.add(book1);
books.add(book2);
books.add(book3);
books.add(book4);
books.add(new Book(500, "스프링 3.0", "이일민", "에이콘출판사", 75000));
System.out.println(books);
int total = 0;
for (Book book : books) {
System.out.println("제목 : " + book.getTitle());
System.out.println("가격 : " + book.getPrice());
total += book.getPrice();
}
System.out.println("전체 가격 : " + total);
}
}
package demo.list;
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListDemo4 {
public static void main(String[] args) {
ArrayList<String> names = new ArrayList<String>();
names.add("홍길동");
names.add("김유신");
names.add("강감찬");
names.add("이순신");
names.add("이성계");
names.add("김구");
names.add("김좌진");
for (String name : names) {
System.out.println(name);
}
System.out.println();
for (int i=0; i<names.size(); i++) {
String name = names.get(i);
System.out.println(name);
}
System.out.println();
/*
* Iterator<E>
* 콜렉션(List 및 Set)의 요소를 추출, 삭제할 때 사용되는 객체다.
* 주요 메소드
* boolean hasNext() - 추출할 객체가 남아있으면 true를 반환한다.
* E next() - 객체를 하나 꺼내서 반환한다.
* void remove() - 객체를 삭제한다.
*/
Iterator<String> it = names.iterator();
while (it.hasNext()) {
String name = it.next();
System.out.println(name);
if (name.startsWith("김")) {
it.remove();
}
}
System.out.println(names);
}
}
package demo.list;
public class Book {
private int no;
private String title;
private String author;
private String publisher;
private int price;
public Book() {}
public Book(int no, String title, String author, String publisher, int price) {
super();
this.no = no;
this.title = title;
this.author = author;
this.publisher = publisher;
this.price = price;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getPublisher() {
return publisher;
}
public void setPublisher(String publisher) {
this.publisher = publisher;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
@Override
public String toString() {
return "Book [no=" + no + ", title=" + title + ", author=" + author + ", publisher=" + publisher + ", price="
+ price + "]";
}
}
package Demo4;
public class Cat extends Animal {
}
package Demo4;
public class Dog extends Animal {
}
package Demo4;
public class AnimalApp {
public static void main(String[] args) {
Animal a = new Dog();
Animal b = new Cat();
Dog c = (Dog) a;
Cat d = (Cat) b;
Dog e = (Dog) b; // 형 변환 예외 발생
}
}
package Demo3;
public class RuntimeExceptionDemo1 {
public static void stringToUpper(String str) {
if (str != null) {
System.out.println(str.toUpperCase());
}
}
public static void main(String[] args) {
// NullPointException
// 객체를 참조하지 않는 참조변수(null값을 가지는 참조변수)로
// 객체의 속성이나 기능을 사용할 때 발생되는 예외다.
String text = null;
//System.out.println(text.length());
RuntimeExceptionDemo1.stringToUpper(text);
}
}
package Demo3;
public class RuntimeExceptionDemo2 {
public static void main(String[] args) {
// ArrayIndexOutOfBoundException : 배열의 인덱스 범위를 벗어났을 때 발생
// StringIndexOutOfBoundsException : 문자열의 인덱스범위를 벗어났을 때 발생
String[] names = {"김유신", "강감찬", "이순신"};
// System.out.println(names[3]);
String text = "abc";
String subText = text.substring(2, 4);
}
}
package Demo3;
public class RuntimeExceptionDemo3 {
public static void main(String[] args) {
// NumberformatException : 문자열을 숫자로 바꿀 때 숫자로 변환할 수 없는 문자열이 포함되어 있으면 발생
// int Integer.parseInt(String numberText)
// double double.parseDouble(String numberText)
String text1 = "1234";
int number1 = Integer.parseInt(text1);
System.out.println(number1 * 3);
String text2 = "1234a";
String text3 = " 1234";
int number2 = Integer.parseInt(text2);
System.out.println(number2 * 3);
}
}
package Demo3;
public class RuntimeExceptionDemo5 {
public static void main(String[] args) {
String text = "dddd";
int value = StringUtils.stringToInt(text);
System.out.println("숫자값 : " + value);
}
}
package Demo3;
public class RuntimeExceptionDemo6 {
public static void main(String[] args) {
// arithmaic Excpetion 0으로 어떤 수를 나눌 때 }
System.out.println(3/0);
}
}
package Demo3;
public class StringUtils {
public static int stringToInt(String text) {
int value;
try {
value = Integer.parseInt(text);
} catch (NumberFormatException e) {
value = 0;
}
return value;
}
}
package Demo4;
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
// 컴퓨터 현재 날짜 및 시간 정보를 갖고 있는 Date객체가 생성된다.
Date now = new Date();
java.sql.Date x = null;
System.out.println(now);
System.out.println(now.toString()); // 날짜와 시간정보를 문자열로 제공하도록 재정의
long value = now.getTime(); // UNIX타임
System.out.println(value);
now.setTime(1234567890123L);
System.out.println(now);
}
}
package Demo4;
import java.util.Random;
public class RandomeDemo {
public static void main(String[] args) {
// 난수를 발생시키는 Random객체 생성
Random random = new Random();
// int범위의 최솟값과 최댓값 사이의 임의의 정수를 제공
int num1 = random.nextInt();
System.out.println(num1);
// 0 <= 난수 < 100
int num2 = random.nextInt(100);
System.out.println(num2);
int num3 = random.nextInt(6) + 1;
System.out.println(num3);
}
}
package demo1;
/**
* 덧셈, 뺄셈 기능이 구현된 클래스입니다.
* @author JHTA
*
*/
public class Calculator {
/**
* 두 수를 전달받아서 더한 값을 반환합니다.
* @param x 숫자
* @param y 숫자
* @return 덧셈 결과가 반환됨
*/
public int plus(int x, int y) {
int z = x + y;
return z;
}
/**
* 두 수를 전달받아서 뺀 값을 반환합니다.
* @param x 숫자
* @param y 숫자
* @return 뺄셈 결과가 반환됨
*/
public int minus(int x, int y) {
int z = x - y;
return z;
}
}
package demo1;
public class Hello {
public static void main(String[] args) {
System.out.println("안녕, 이클립스");
Calculator cal = new Calculator();
}
}