Java 입문 - 클래스 생성
소스 파일 구조
1. package 선언문
패키지 (package) = 클래스 파일의 묶음, 폴더 같은 개념
-
같은 종류 등 클래스를 그룹화/분리화 해서 관리: 관리 효율성 ↑
-
물리적 디렉토리를 생성하며 계층 구조의 구성이 가능
-
권한 제어 가능 (access modifier), 이름 충돌 방지
-
선언위치: 소스코드 첫번째 수행문
-
0, 1 : 패키지 선언문은 하나만 선언 또는 생략 가능
- 생략 가능하지만 생략을 권장하지는 않음
- 생략시 : default package (=friendly package)
-
선언형식:
package 패키지명.서브패키지명;
- sub package level에 대한 제한은 없음. 보통 2~4 level
- 예시: java.lang, java.sql, java.util, java.net
-
패키지 이름 형식
- 내부용: 내부 표준 규칙에 따라 지정, 자유롭게 지정 가능
- 공개용: 패키지 충돌발생하지 않도록 지정. 해당 단체, 기관의 url 주소를 뒤집어서 지정
- www.naver.com ⇒ com.naver.top.sub;
- www.work.com ⇒ com.work.view / com.work.model.service / com.work.model.dto
2. import 선언문
import = 사용한 클래스의 경로 지정
- 선언위치: package 선언문 뒤
- 해당 클래스 파일에서 사용한 클래스의 경로 지정
- 선언형식:
- import 패키지명.서브패키지명.*; (개발자들이 선호)
- import 패키지명.서브패키지명.클래스명; (권장)
- 0 ~ N : 생략 또는 다중 선언 가능
- 다른 패키지에 있는 같은 이름의 클래스를 사용하는 경우
- 예) java.util.List, java.awt.List
- List list; → 문제발생
- java.util.List list = new ArrayList(); // java.util.Collection 설명
- java.awt.List list = new java.awt.List();
- import 구문이 생략 가능한 클래스
- java.lang.* : system, string, stringBuffer 등
- same package: 같은 폴더에 위치한 package
3. class 선언문
class = 해당 객체의 구성요소 모델링
- 선언위치: package, import 선언문 뒤
- 객체 모델링 정보 구조화
- 객체의 구성요소: 속성(변수), 메서드, 생성자
- 선언형식: [public] class 클래스명{ }
- 1 ~ N: 1개 이상 다중 선언 가능, BUT 하나의 소스코드에 1개의 클래스를 선언하는 것을 권장
- 다중 선언하는 경우는 개발자가 테스트를 하는 경우 사용
객체 지향 프로그래밍 (OOP; Object Oriented Programming)
MVC(Model View Controller) Pattern
- 패턴 = 문제점에 대한 해결 방법을 표준화한 것
- Model
- 업무 처리하는 로직 : business logic, process logic, service logic
- database 접근 로직: DAO(Data Access Object) Pattern
- 값을 갖는 클래스: DTO(Data Transfer Object) Pattern, VO(Value Object), Domain Class
- View
- 사용자 요청-응답을 위한 UI (User Interface)
- CUI: Command(Consol) User Interface
- GUI: Graphic User Interface ⇒ java.awt., java.swing., html (web)
- Controller
- 요청-응답을 제어하는 클래스
객체 (Object)
-
개념: 현실 세계에 존재하는 사물 또는 개념 (일반적 관점)
→ 노트북, 자동차, 핸드폰, 등
⇒ 자동차: 색상(검정색), 차종-브랜드명(K5) ※ 차종/브랜드명 처럼 헷갈리는 부분은 용어집(data dictionary) 구성
⇒ 주차장 주차 기능 구현: 주차비, 주차시간=입차시간-출차시간, 차량번호, 저공해자량여부, 경차여부 등
-
프로그램의 대상이 되는 모든 것 또는 프로그램에서 관리해야하는 모든것 (개발자 관점)
-
구성요소:
- 속성(상태, 데이터), 기능(행위)
- 멤버변수, 메서드, 생성자
클래스 (Class)
-
객체의 속성과 기능을 분석한 정보를 바탕으로 코드로 구조화한 것
-
틀 (Template, blueprint)
-
예) 웹사이트 회원관리 프로그램 개발
→ 대상이 되는 객체 추출 (회원, 게시글 등), 이를 코드로 구현하면 클래스가 된다.
Instance (Object)
- 클래스를 이용해서 실제 메모리에 로딩된 객체 (object 또는 instance)
- 객체 생성방법: 클래스이름 참조변수명 = new 클래스이름( );
객체 생성 절차
예시) Member dto1 = new Member( );
- 메모리 할당: 멤버변수
- 기본값 자동 초기화
- 명시적 초기화 :
- 멤버변수 선언시에 함께 지정하는 초기값
- public String memberId = “Guest”;
- 생성자 수행
- 개발자가 명시적으로 생성자를 정의하지 않으면 javac(자바 컴파일러)가 자동으로 기본생성자 제공
- 클래스에 생성자가 정의되어 있을 경우 기본생성자 제공되지 않음
- 메모리에 생성된 객체에 대한 참조값 할당
자바의 데이터타입
- 기본형 : primitive type
- 정수형: byte (8bit) ⇒ short (16bit/2byte) ⇒ int (32bit, 기본) ⇒ long (64bit)
- 5 : int
- 5L 또는 5l : long
- 기본값: 0
- 실수형: float (32bit) ⇒ double (64bit, 기본)
- 5.3, 5.3D, 5.3d : double
- 5.3F 또는 5.3f : float
- 기본값: 0.0
- 논리형: 참과 거짓, 제어문의 조건 비교시 사용
- boolean
- 참: True (1)
- 거짓: False (0)
- 기본값: False
- 단일문자형
- 유니코드: 어떠한 언어 표현 가능
- char (16bit, 2byte)
- ‘A’, ‘가’ : 데이터를 ‘(단일인용부호)로 감싸야함
- 기본값: 공백문자 (유니코드 ‘\u0000’)
- 정수형: byte (8bit) ⇒ short (16bit/2byte) ⇒ int (32bit, 기본) ⇒ long (64bit)
- 객체형(참조형) : object type / reference type
- 모든 클래스 (추상클래스, 인터페이스 포함), 배열
- 클래스 ⇒ 클래스를 작성한다, 설계한다는 의미를 새로운 객체 타입을 만든다는 것
- 문자열 클래스: java.lang.String
- new 키워드를 사용하지 않고 객체 생성이 가능한 클래스
- 예) String name = “홍길동”; // new 생략
- 예) String name = new String(“홈길동”); // new 사용 가능
- new 키워드를 사용하지 않고 객체 생성이 가능한 클래스
- 객체형 데이터의 기본값은 null
자바의 주석문
-
// 한줄 주석문
-
/* 여러줄 주석문 */
-
자바 API 문서 주석문
개발이 완료되면 HTML 형식의 도움말을 자동 생성하는 주석
- 형식: /** API 문서 도움말 */
- 선언위치: 클래스 선언문 앞, 멤버변수 언언문 앞, 메서드 선언문 앞, 생성자 선언문 앞
- API 문서의 구성요소
- 도움말
- HTML TAG: <pre>작성된 내용을 그대로 화면에 표시</pre>
- API 문서 전용 어노테이션 태그
- 기본형식: @어노테이션태그명 설명
- 예) @author 작성자이름 @ver version1.0 @return 반환값설명 @param 매개변수명 매개변수설명
제어자 (modifiers)
1. access modifiers
접근 권한을 제어하는 제어자
public(+)
- 필요시에 어떤 클래스든지 상관없이 접근 가능
- 클래스, 멤버변수, 생성자, 메서드에 사용
protected(#)
- sub class (상속받았다면 다른 패키지에 있는 클래스도 접근 가능)
- 멤버변수, 메서드
default, package, friendly (생략):
- same package (같은 패키지에 있는 클래스 접근 가능)
- 클래스, 멤버변수, 생성자, 메서드, 지역변수
private(-):
- same class (현재 클래스에서만 접근 가능)
- 멤버변수, 생성자, 메서드
2. usage modifiers
사용과 관련된 제어자
static
- 객체생성없이 사용가능한 멤버변수, 멤버메서드, 초기화블럭
abstract
- 미완성 클래스, 미완성 메서드
final
- 상속불가 클래스, 재정의 불가 메서드, 값변경불가 상수
메서드
메서드 = 클래스 변수를 활용하여 일을 하는 함수
- 메서드의 이름은 명확하게 정의해주는 것이 중요하다
- 돌려주는 값 (반환타입)을 지정해야 함
- 반환하는 값이 없을 경우: void
- 반환하는 값이 있을 경우: 데이터타입 선언 - 기본형, 객체형, 배열
- 일을 하기위해서 필요한 데이터: 아규먼트 목록, 0 ~ N, 데이터타입: 기본형, 객체형, 배열
메서드 선언형식
아규먼트가 없는 형식:
[modifiers] 반환타입 메서드명() {
// 수행문
// 반드시 마지막 수행문으로 반환타입 매핑되는 값을 돌려주는 수행문
return 반환값;
}
아규먼트가 있는 형식
[modifiers] 반환타입 메서드명(매개변수타입 매개변수명, 매개변수타입 매개변수명) {
// 수행문
return 반환값;
}
반환타입 없는 형식
[modifiers] void 메서드명([매개변수타입 매개변수명, 매개변수타입 매개변수명] {
// return;
}
return 제어문
-
호출한 메서드로 돌아간다
-
메서드 수행이 종료되면 자동으로 호출한 메서드로 돌아감
-
return 값;
→ 값을 가지고 호출한 메서드로 복귀
→ 반환타입이 void가 아닌 경우에 마지막 수행문으로 반드시 수행해야 함
-
return;
→ 메서드 수행을 중지하고 호출한 메서드로 복귀
→ 반환타입이 없는 void 인 경우 개발자가 필요에 의해서 메서드 수행을 중지시키고 호출측으로 복귀해야하는 경우에 사용
값을 변경하는 메서드
setter()
- name 변경하는 메서드 : + setName(String) : void
값을 반환(조회)하는 메서드
getter()
- name 조회(반환)하는 메서드 : + getName(): String
댓글남기기