• Home
  • About
    • Young's Github Pages photo

      一日不作一日不食

    • About
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

Java 정리 09

23 Nov 2018

Reading time ~3 minutes

Java 정리 09 - class


OOP (Object Oriented Programming)

  • 객체 지향 프로그래밍
  • 실생활(현업)의 모든 사물(업무)을 객체로 보고 그 객체를 컴퓨터세계에서 구현하는 것
  • 3대 특징 상속, 다형성, 캡슐화

class

  • 참조형 데이터형
    • class, 문자열, 배열
    • 실제 값은 메모리의 다른 곳(heap)에 위치하고 그 주소(4byte)를 사용(stack)하는 데이터형
    • 참조형 데이터형은 크기를 알 수 없다
  • 사용자정의 데이터형
    • 존재하는 데이터형을 조합하여 이름을 부여하고 사용하는 것
  • 객체를 찍어내는 설계도
    • 설계도 != 객체
// 객체화. new는 객체 생성용 키워드(객체는 heap영역에 생성됨)
클래스명 객체명 = new 클래스명();

클래스명 객체명 = null;
// null은 heap의 주소를 가지지 않은 상태
// 참조형 데이터형는 초기화값으로 null을 갖는다
  • 자바에서 지원하는 클래스는 7가지
    • class - 일반적인 코드 정의
    • abstract class - 상속을 위해 만드는 클래스
    • interface - 다중상속의 장점을 사용
    • Inner class - Event를 처리하기 위해
      • inner class - 내부클래스를 인스턴스 변수처럼 사용
      • nested class - 내부클래스를 static 변수처럼 사용
      • local class - 내부클래스를 지역변수처럼 사용
      • anonymous inner class - 클래스를 Argument로 사용

01

// anonymous innerclass
method명(new 부모클래스명() {
     
     자식의method() {
       ...
     }

     @Override
     부모의method() {
       ...
     }
     ...
});

클래스 생성

[접근지정자] class 클래스명 [extends 부모클래스명] [implements 구현할인터페이스명,...] {

}

// 접근지정자
public - 패키지 외부에서 클래스 사용가능
default(package) - 패키지 내부에서만 클래스 사용가능

final - 상속 불가(오버라이드 금지)
static - nested class 만들 때
abstract - abstract class 만들 때(상속 목적)
// abstract와 final은 같이 사용할 수 없다(error!)

//클래스명은 대문자로 시작

클래스 작성 및 사용

  1. 대상선정
  2. 객체모델링
  3. 클래스 구현
  4. 객체생성
  5. method 호출
  • 1~2는 PM 또는 아키텍처가 수행
  • 3~5는 개발자가 수행

클래스 다이어그램

  • 클래스 구현 전에 작성

02


클래스 setter method, getter method

  • setter method
    • instance 변수에 값을 설정하는 일
      • 값에 대한 검증을 수행할 수 있기 때문에 setter를 사용
    • 접근지정자는 public, 반환형은 없다
    • 매개변수가 반드시 존재
    • method명은 set을 접두어로 변수와 결합하여 정의
  • getter method
    • instance 변수에 설정된 값을 받아가는 일
    • 접근지정자 public, 반환형 있음
    • 매개변수는 없음
    • method명은 get을 접두어로 변수와 결합하여 정의

클래스 작성 예시

  • 대상 선정
    • 마카펜
      • 검은마카펜, 파란마카펜, 빨간마카펜
  • 객체 모델링(추상화)
    • 추상화란 대상의 공통 특징을 뽑는 것
    • 마카펜
      • 명사적 특징
        • 색
        • 몸체
        • 뚜껑
      • 동사적 특징
        • 쓴다
  • 클래스(설계도) 작성

03

// Marker Class
public class Marker {
      // 명사적 특징(변수)
      private String color;   // 마카펜의 색
      private int body;       // 마카펜의 몸체의 갯수
      private int cap;        // 마카펜의 뚜껑의 갯수
      
      // setter
      public void setColor(String color) {
            // 인스턴스변수에 설정될 값에 대한 검증 수행
            if (color.equals("빨간색") || color.equals("파란색"))
                  this.color = color;
            else
                  this.color = "검은색";
      }

      public void setBody(int body) {
            this.body = body;
      }

      public void setCap(int cap) {
            this.cap = cap;
      }
      
      // getter
      public String getColor() {
            return color;
      }
      public int getBody() {
            return body;
      }
      public int getCap() {
            return cap;
      }
      
      // 동사적 특징(메소드)

      String write(String msg) {
            return color+"인 마카펜으로 칠판에 \""+msg+"\" 를 쓴다";
      }
}
  • 객체화, 사용
// UseMarker Class
public class UseMarker {

      public static void main(String[] args) {
            // 검은색 마카펜 1개 생성
            Marker black = new Marker();

            black.setColor("검은색");
            black.setCap(1);
            black.setBody(1);
            
            System.out.printf("생성된 마카펜 색[%s], 뚜껑[%d], 몸체[%d]"
              ,black.getColor(), black.getCap(),  black.getBody());
            System.out.println();

            // 생성된 객체의 사용
            System.out.println(black.write("안녕하세요"));
            
            // 빨간색 마카펜 객체를 5개 생성 후 사용
            Marker red = new Marker();
            
            red.setColor("빨간색");
            red.setBody(5);
            red.setCap(5);
            
            System.out.printf("생성된 마카펜 색[%s], 뚜껑[%d], 몸체[%d]"
              ,red.getColor(), red.getCap(), red.getBody());
            
      }
}

숙제풀이

  • 너구리, 오징어짬뽕, 신라면
    • 다음 대상을 보고 추상화, 클래스 작성, 객체화, 사용하기

04

RamenClass UseRamenClass



Java