Java 입문 - 클래스 생성

4 분 소요

소스 파일 구조

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( );

  1. 메모리 할당: 멤버변수
  2. 기본값 자동 초기화
  3. 명시적 초기화 :
    • 멤버변수 선언시에 함께 지정하는 초기값
    • public String memberId = “Guest”;
  4. 생성자 수행
    • 개발자가 명시적으로 생성자를 정의하지 않으면 javac(자바 컴파일러)가 자동으로 기본생성자 제공
    • 클래스에 생성자가 정의되어 있을 경우 기본생성자 제공되지 않음
  5. 메모리에 생성된 객체에 대한 참조값 할당

자바의 데이터타입

  1. 기본형 : primitive type
    1. 정수형: byte (8bit) ⇒ short (16bit/2byte) ⇒ int (32bit, 기본) ⇒ long (64bit)
      • 5 : int
      • 5L 또는 5l : long
      • 기본값: 0
    2. 실수형: float (32bit) ⇒ double (64bit, 기본)
      • 5.3, 5.3D, 5.3d : double
      • 5.3F 또는 5.3f : float
      • 기본값: 0.0
    3. 논리형: 참과 거짓, 제어문의 조건 비교시 사용
      • boolean
      • 참: True (1)
      • 거짓: False (0)
      • 기본값: False
    4. 단일문자형
      • 유니코드: 어떠한 언어 표현 가능
      • char (16bit, 2byte)
      • ‘A’, ‘가’ : 데이터를 ‘(단일인용부호)로 감싸야함
      • 기본값: 공백문자 (유니코드 ‘\u0000’)
  2. 객체형(참조형) : object type / reference type
    • 모든 클래스 (추상클래스, 인터페이스 포함), 배열
    • 클래스 ⇒ 클래스를 작성한다, 설계한다는 의미를 새로운 객체 타입을 만든다는 것
    • 문자열 클래스: java.lang.String
      • new 키워드를 사용하지 않고 객체 생성이 가능한 클래스
        • 예) String name = “홍길동”; // new 생략
        • 예) String name = new String(“홈길동”); // new 사용 가능
    • 객체형 데이터의 기본값은 null

자바의 주석문

  1. // 한줄 주석문

  2. /* 여러줄 주석문 */

  3. 자바 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

댓글남기기