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로 사용
// anonymous innerclass
method명(new 부모클래스명() {
자식의method() {
...
}
@Override
부모의method() {
...
}
...
});
클래스 생성
[접근지정자] class 클래스명 [extends 부모클래스명] [implements 구현할인터페이스명,...] {
}
// 접근지정자
public - 패키지 외부에서 클래스 사용가능
default(package) - 패키지 내부에서만 클래스 사용가능
final - 상속 불가(오버라이드 금지)
static - nested class 만들 때
abstract - abstract class 만들 때(상속 목적)
// abstract와 final은 같이 사용할 수 없다(error!)
//클래스명은 대문자로 시작
클래스 작성 및 사용
- 대상선정
- 객체모델링
- 클래스 구현
- 객체생성
- method 호출
- 1~2는 PM 또는 아키텍처가 수행
- 3~5는 개발자가 수행
클래스 다이어그램
- 클래스 구현 전에 작성
클래스 setter method, getter method
-
setter method
-
instance 변수에 값을 설정하는 일
- 값에 대한 검증을 수행할 수 있기 때문에 setter를 사용
- 접근지정자는 public, 반환형은 없다
- 매개변수가 반드시 존재
- method명은 set을 접두어로 변수와 결합하여 정의
-
instance 변수에 값을 설정하는 일
-
getter method
- instance 변수에 설정된 값을 받아가는 일
- 접근지정자 public, 반환형 있음
- 매개변수는 없음
- method명은 get을 접두어로 변수와 결합하여 정의
클래스 작성 예시
-
대상 선정
- 마카펜
- 검은마카펜, 파란마카펜, 빨간마카펜
- 마카펜
-
객체 모델링(추상화)
- 추상화란 대상의 공통 특징을 뽑는 것
- 마카펜
- 명사적 특징
- 색
- 몸체
- 뚜껑
- 동사적 특징
- 쓴다
- 명사적 특징
- 클래스(설계도) 작성
// 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());
}
}
숙제풀이
- 너구리, 오징어짬뽕, 신라면
- 다음 대상을 보고 추상화, 클래스 작성, 객체화, 사용하기