반응형
*Class(설계도)
-
*oop언어
-
<(OO객체지향으로 쓰기도)(Object Oriented Programming:
-
객체지향언어 : 가급적 객체를 많이 만들고 사용하기를 권장하는 언어
-
실생활의 모든 사물을 객체로 보고 그 객체를 컴퓨터에서 구현하고 사용하기 적합한 언어 <(의뢰를 받아 현업사원들 기준 업무들을 객체로 보아 RFP(요구사항 정의서)작성_현업의 업무를 컴퓨터를 통해서 구현하고 사용하기좋은
-
3대특징 : 상속, 다형성, 캡슐화(문법이 다를뿐 oop언어는 이특징을 다 가짐)
-
ex) 안경을 객체(사용하는 대상물질,실체화된 구현체)화했을때 먼저 재료들을 모아 만들어야 한다. 그래서 필요한게 설계도가 필요. =>설계도가 잘만들어 져야 구현체가 잘만들어짐(설게도와 객체는 다름)
-
class의 형태/종류 7가지
-
class
-
abstract class
-
interface
-
Inner class
-
inner class
-
nested class
-
local class
-
anonymous inner class
*Class(설계도)
-
참조형 데이터 : 실제값은 메모리의 다른곳(heap영역)에 위치하고 그 주소를 사용(stack->method)하는 데이터형
-
<ex)컨닝페이퍼: 내머릿속에 데이터가 없어서 다른곳에 적어두고 어디에 있는지만 앎, 얼마나 있는지는 모른다?
-
그 크기를 알수 없다. < (주소는 4byte인건 알지만 시작주소를 가져서 알뿐 얼마나 갖고있는지는 모른다. (저장된 데이터의 크기))
-
사용자 정의 데이터형(자료형)
-
데이터형: 값을 저장하기 위해서 미리 예약해 놓은 공간들의 이름들
-
참조형 데이터형 : Class, 문자열, 배열
-
: 존재하는 데이터 형을 조합하여 이름을 부여하고 사용하는 것. <(PL/SQL의 record와 비슷_%rowtype)
-
<ex)학생정보를 저장할때에는 단일데이터라고 볼수 없어, 학생의 번호,이름, 나이,,,,등의 여러개의 정보를 묶어 하나의 데이터로 만드는것(=>사용자 정의 자료형)
-
=>public class Student{ <클래스의 접근지정자는 딱 2개, default와 public
-
<heap에 올릴때는 객체화 라는거 하게됨
-
객체화 : 클래스명 객체명 = new(객체생성용keyword=>heap에 생성을 도움) 클래스명();
-
클래스명 객체명=null; 일때는 heap의 주소를 가지지 않는다. 만들어지지 않아서 쓸수 없다. (null은 참조형 데이터형에 초기화 값) 생성과 저장..다름
Class-일반적인(대부분의) 코드정의 | ||
class 클래스명 | ||
|
변수 | |
|
|
인스턴스(member) 변수,static(class)변수 |
|
method | |
|
|
instance method, static method
main method(_실행되었을때 자동으로 불러지는 ) |
abstract class-상속을 위해 만드는 클래스 | ||
abstract class | ||
|
변수 | |
|
|
|
|
method | |
|
|
|
|
abstract method-구현의 강제성 부여(내자식은 이걸해야해) | |
|
|
자식이 구현해야할 일의 목록 |
interface-다중상속의 장점을 사용하기 위해서 사용(실제론 약결합(유연성향상)하기위해 사용) | ||
interface 인터페이스명 | ||
|
상수(Constant) |
|
|
|
|
|
abstract method |
-1.7부터 default도 추가됨 |
|
|
자식이 구현해야할 일의 목록 |
Inner class(안긴 클래스)-이벤트(Event)를 처리(handling)하기 위해서 사용.(디자인을 하지 않으면 필요없다) |
| ||
inner class-내부클래스를 instance변수처럼 사용할 때 |
| ||
class 클래스명 |
| ||
|
변수 |
| |
|
|
|
|
|
method |
| |
|
|
|
|
|
public class Inner |
| |
|
|
변수 | |
|
|
|
|
|
|
method | |
|
|
|
|
Inner class(안긴 클래스)-이벤트(Event)를 처리(handling)하기 위해서 사용.(디자인을 하지 않으면 필요없다) | ||
nested class-내부클래스를 static변수처럼 사용 | ||
class 클래스명 | ||
|
변수 | |
|
|
|
|
method | |
|
|
|
|
static class Nested | |
|
|
변수(가급적 static으로 사용하게됨) |
|
|
|
|
|
method |
|
|
|
Inner class(안긴 클래스)-이벤트(Event)를 처리(handling)하기 위해서 사용.(디자인을 하지 않으면 필요없다) | |||
local class-내부클래스를 local | |||
class 클래스명 | |||
|
변수 | ||
|
|
|
|
|
method |
| |
|
|
class Local |
|
|
|
|
변수 |
|
|
|
|
|
|
|
method |
|
|
|
|
Inner class(안긴 클래스)-이벤트(Event)를 처리(handling)하기 위해서 사용.(디자인을 하지 않으면 필요없다) | ||
anonymous innerClass-클래스를 Arguments로 사용할 때
method (new 부모클래스 { <자식의 이름이 없어=>anonymous(익명)
자식의 method(){
}//거나 부모의 메소드라 오버라이드 됨
override method()
}=>인자값Arguments 가 됨
); |
-
작성법)
[접근지정자(Access Modifier)] class 클래스명 [extends 부모클래스명(_부모는 하나 단일 상속만 지원)] [implements 구현할 interface명,,,] {
[ ] 생략가능
-
사용가능한 접근지정자)
-
public : 패키지 외부에서 이클래스 사용가능.
-
default : 패키지 내부에서 사용.(_접근지정자 쓰지않은것을 의미) (package 접근지정자 라고도?) <나만쓸래
-
일반클래스의 접근지정자는 아니지만..)
-
(클래스의) final : 상속불가(오버라이딩 불가?)
-
static : 중첩클래스를 만들때 (nested class 작성할때)
-
abstract : 추상 클래스를 작성할때(상속목적_으로 final과 붙으면 Error)
-
ex) 선택이 두개가 되면 상충?되서 Error
-
클래스명은 낙타체로 구성
-
작성순서)
1.대상 선정(RFP로 정의되어 나옴_인터뷰,설문지,브레인스토밍법등..비슷한직급끼리)
2.객체모델링(공통특징)
3.클래스 작성(<단지설계도일뿐)
4.객체 생성(instans화)
5.method 호출하여 생성된 객체에게 일을한다.
< 3,4,5=>실제코딩작업부분 / 1,2는 아키텍쳐가..PM?이 하게 됨.
-
1.대상선정
검은색 마카펜 파란색 마카펜 빨간색 마카펜
-
2.객체모델링(추상화 작업: 대상의 공통특징을 뽑는것)
마카펜-명사적특징(눈에보이는) : 색, 몸체, 뚜껑
-동사적특징(동작에관한) : 쓴다
-
3.클래스작성(설계도작성)
class Maker{
변수(명사적특징)
method(동사적특징)
}
=>class Diagram
+(:접근지정자가 public) #(:접근지정자가 protected) -(:private,default) 실선(:관계) ->실선화살표(:상속_클래스상속) - ->점선화살표(:인터페이스 구현) =>gliffy로 구현
클래스명 |
변수
|
method
|
+Marker |
-String color
-int body
-int cap
=>instance변수 =>private |
(private 변수에 값을 넣는 method)
(setter method-)
(getter method-)
+setColor(String ) :void(반환형이 뒤로)
+setBody(int ) : void
+setCap(int) : void
(public 이 되면 밖에서 아무값넣을수 있어..엉뚱한값)
+getColor() : String
+getBody() ; int
+getCap() : int
=>동사적인 특징이 아님
+write(String) : String
=>main메소드가 없기때문에 혼자실행되지 못하고 |
*Setter method
-
<세팅할때<(쓰고자하는 필드에 올려놓는것)
-
instance변수에 값을 설정하는 일.
-
밖에서 들어와야 하니 접근지정자는 public으로 반환형은 없고, 메소드명은 Set을 접두어로 변수와 결합하여 정의. 매개변수가 반드시 존재해야 한다. <고정값
-
ex) public void setColor (String color) {
-
this.color = color;
-
}
-
public void setBody(int body){
-
if(body...){//값의 검증
-
this.body = body;
-
}
-
}
-
<메소드를 통하면 값에대한 검증을 할수 있어 이렇게 사용한다.
*getter method
-
인스턴스변수에 설정된 값을 받아가는 일
-
접근지정자는 public 반환형O
-
method명 get을 접두어로 변수와 결합하여 정의 매개변수는 x<가변일
-
ex) public String getColor () {
-
return color;
-
}
-
public int getBody(){
-
return body;
-
}
+UseMarker |
|
+static main(String[]) : void |
-
4.객체화
클래스명(설계도명) 객체명 = new 클래스명();
<재료를 떄려넣어 만드는 과정
Marker black = new Marker();
=>heap에 설정되면서 인스턴스 변수가 초기화.
-
5.사용
black.setColor("검은색");
...
black.write("안녕하세요");
<일반적이지 않은경우 정의하는 방법 적어준다. >
public class Marker {
private String color; //마카펜의 색
// public String color; //마카펜의 색
private int body; //마카펜의 몸체의 갯수
private int cap; //마카펜의 뚜껑의 갯수
......
}
Marker m = new Marker(); //하게 되면
//=>노트
1.대상선정
ooo ☆☆☆ □□□
2.추상화
사람
명사적특징 : 머리,눈,코,입,머리카락,귀,몸통,팔,다리,손가락,발가락,손톱,눈썹,,,이름
동사적특징 : 잔다, 먹는다, 논다, 일한다, 공부한다, 춤춘다, 말한다,,,
+Person(여러사람접근가능) |
-int eye, nose, mouth
-String name
=>밖에서 접근이 되지않게 |
+setEye(int) : void
+setNose(int) : void
+setMouth(int) : void
+setName(String) : void
+getEye() : int
+getNose() : int
+getMouse() : int
+getName() : String
+eat(String, int) :String
+eat() : String
|
+UsePerson |
|
+static main(String[]) : void |
4.객체 생성
Person teacksung = new Person();
teacksung.SetName("ooo");
teacksung.SetEye(2);
teacksung.SetNose(1);
teacksung.SetMouth(1);
5.사용
teacksung.eat();
eat("육회비빔밥",8000);
<인스턴트변수와 Setter method 색으로 구분하고, 만약 this 가 안붙어 있으면 파라미터가들어온 값이 그대로 자기 자신한테 저장>
<<<숙제>>>
+Ramen |
-String maker
-int men
-int soup
-String name |
+set(int) : void
+set(String) : void
+get() : int
+get() : String
+eat(String, int) :String
+eat() : String |
반응형