Daily coding
Java Basic : day 8 - 객체 지향 프로그래밍 Object Oriented Programming 본문
Java Basic : day 8 - 객체 지향 프로그래밍 Object Oriented Programming
sunnnkim 2019. 11. 27. 19:58** OOP 객체지향 **
:
OOP 객체지향
* 절차지향 : 선언 - 초기화 - 입력 - 처리 - 결과로 프로그래밍이 이루어짐
- 문제점 : 코드가 길고 복잡해질수록 유지보수가 어려움
* 객체지향
* 참고 - (AOP : Aspect Oriented Programming)
- 처리 중심의 프로그래밍
<-> 절차지향 : 순차적 처리
속도가 빠르다
- 객체지향은 클래스 설계가 중요함.
** 특징 **
1. 은닉성 (캡슐화)
2. 상속성
3. 다형성
- 상속성과 다형성은 연관되어 있다
Class 설계 규칙
- 객체(설계부)는 메모리 영역에 올라가지 않는다.
- 실제 데이터를 클래스 설계에 따라 저장하고 싶으면 다른 클래스에서 클래스변수(인스턴스)를 생성해야 한다.
class 클래스명
{
-- 변수부 --
접근지정자(접근제어자) 변수자료형 변수명 ; --> member 변수
ex) public int number;
-- 함수부 --
접근지정자(접근제어자) 리턴타입 메소드명(매개변수){
처리부분
}
ex) public int getNumber(int number){
return this.number;
}
}
* 변수(객체)를 선언한 후에 동적할당을 해야 접근가능(new로 할당)
class 변수 => object(객체) / 인스턴스instance(주체)
* instance = 실제 메모리영역에 올라가는 변수
클래스명 인스턴스명 = new 클래스명();
// 위의 코드는 기본적인 인스턴스 생성과 초기화 방법
인스턴스 -> stack 메모리에 존재 (값에 접근하기 위한 참조, 주소값),
실제 데이터의 주소값을 가지고 있다.
실제값 -> heap 메모리에 들어가 있음
*/
클래스변수의 동적할당
MyClass cls; // cls == instance
cls = new MyClass(); // heap에 저장, cls => stack
// MyClass의 변수 및 메소드 접근방법
cls.c='A';
cls.x=12;
cls.func();
cls.method(33);
}
클래스 설계 예시
class MyClass{
// 변수부 (멤버변수)
int x,y;
char c;
String str;
// 클래스 선언부이기 때문에 변수에 값을 넣으려고 하면 오류가 난다.
// str = " ";
// 위의 코드는 오류가 난다.
// 메소드부
public void setX(int x) {
this.x = x;
}
// 클래스 내부의 메소드는 클래스 내부의 변수에 접근할 수 있다.
void func() {
x = 0;
System.out.println("MyClass func()");
}
void method(int i) {
str = "hello";
x = i;
System.out.println("MyClass method(int i) ");
System.out.println("x = " + x);
}
}
예시
// TV ( 안방, 거실, 내방) 총 3대가 있을 때 필요한 변수
// 절차지향일때
String namp [] = new String[3];
int channel [] = new int [3];
boolean power[] = new boolean[3];
객체지향일때
// 데이터(변수)에 직접 접근하지 않고
// getter / setter 메소드를 작성하여 접근한다.
// 변수에 직접 접근하는 것을 막기위해 제약을 걸어준다. (접근 지정자)
// 변수이름으로 인해 충돌이 있을 수 있고 절차지향으로 바뀔 수 있기 때문
TVClass tv1 = new TVClass();
TVClass tv2 = new TVClass();
TVClass tv3 = new TVClass();
tv1.setName("LG");
tv1.setChannel(15);
tv1.setPower(true);
tv2.setName("Samsung");
tv2.setChannel(0);
tv2.setPower(false);
tv3.setName("Daewoo");
tv3.setChannel(32);
tv3.setPower(true);
TVClass arr[] = new TVClass[3]; // 클래스 변수는 배열로도 할당할 수 있다.
// arr[0].setChannel(11); <-- 이렇게 하면 Nullpointer뜸 (동적할당을 안했기 때문)
arr[0] = new TVClass();
arr[1] = new TVClass();
arr[2] = new TVClass();
arr[0].setChannel(11); // <-- 정상적으로 작성됨
MyClass cls2 = new MyClass();
}
class TVClass{
String name;
int channel;
boolean power;
// setter 만들기
public void setName(String name) {
this.name = name;
}
public void setChannel(int channel) {
this.channel = channel;
}
public void setPower(boolean power) {
this.power = power;
}
//getter 만들기
public String getName() {
return name;
}
public int getChannel() {
return channel;
}
public boolean isPower() {
return power;
}
}
'Language > Java_basic' 카테고리의 다른 글
Java Basic : day 8 - OOP: 생성자 (0) | 2019.11.27 |
---|---|
Java Basic : day 8 - OOP: Class 특징 - 1. 은닉화 (0) | 2019.11.27 |
Java Basic : day 7 - Example 01 : 메소드로 성적 입출력 프로그램 작성하기 ( CRUD + FileWrite ) (0) | 2019.11.26 |
Java Basic : day 7 - File write 파일 쓰기 (0) | 2019.11.26 |
Java Basic : day 7 - File Read 파일 읽기 (0) | 2019.11.26 |