[뉴렉처] 자바 객체지향 강의

2021. 1. 25. 02:05BACK END/JAVA

2021/01/24 1강 캡슐화

 

객체지향 프로그래밍의 시작은 캡슐화

실세계의 일들을 객체를 사용해서 모델링하는 것

변수, 함수, 데이터 구조를 갖고 구성됨

 

 

기존의 프로그래밍 

절차적 프로그래밍은 코드의 양이 많고 길어지면서 관리가 어려움

구조적 프로그래밍은 객체의 구조변경에 아주 취약함

 

 

함수

함수는 외부수정의 영향을 받아선 안됨

그래서 매개변수를 사용하고, 지역변수로 사용함

 

 

캡슐화

데이터를 기준으로 함수를 수납해야 함

왜냐면, 함수는 데이터를 사용하고 데이터가 구조화 돼있기 때문

구조화된 데이터를 사용하는 함수모듈의 독립성을 침해하는 문제를 해결할 수 있음

 

 

캡슐화의 정의

캡슐화는 데이터 구조와 함수를 하나의 영역에 정의하는 것

객체와 함수가 모여서 한 덩어리를 이루는 것이며,

데이터 구조에 따른 코드의 한정범위를 "캡슐 범위"로 한정되는 것

* 외부에서 수정이 발생하지 않도록 하기 위함

 

 


2021/01/24 2강 캡슐화

캡슐화를 통해 데이터구조와 함수의 영역을 제한하여 오류의 범위를 한정함

package part3.ex1.캡슐화;

public class ExamList{
/*	exams1 Program에서 사용하던 것을 해당 클래스로 옮김
    //exams1 > exams 로 변경해줌. Program에선 오류가 안남.
	Exam[] exams1;	*/
    
    Exam[] exams;
    int current;
    
    static void printList(ExamList list) {	}
    static void printList(ExamList list, int size) {	}
    static void inputList(ExamList list) {	}
    public static void init(ExamList list) { 
    	list.exams = new Exam[3];
   	 	list.current = 0;
    }
    
}



public class Program {

	ExamList list = new ExamList();

/*	list.exams = new Exam[3];
    list.current = 0;
   	값을 초기화해주는 위 코드는 잘라내고
  	초기화 역할을 하는 init라는 함수를 ExamList에서 생성하여
    그 안에 잘라낸 코드를 붙여넣는 것으로 변경함 */
    
    ExamList.init(list); //list를 ExamList의 init로 넘겨받아 초기화함
	
    
    //외부 클래스에 있는 함수를 쓸 때
    boolean keepLoop = true;
    while(keepLoop) {
    menu = inputMenu();
    switch(menu) {
    
    // 함수 호출에 대한 문제 해결
    // . 연산자를 사용하여 ExamList에 있는 함수를 사용하겠단 뜻
    	case1:
        	ExamList.inputList(list);
            break;
  	}  
     
/*    	ExamList list를 사용하는 코드는 ExamList.java로 이동
    	static void printList(ExamList list){
		printList(list, list.current);
	} */

	static void printList(ExamList list, int size){
		System.out.println(" ~~ ");
 	  	Exam[] exams = list.exams;
 	}
    
 }

 

예를 들어, 초기화 메소드에 관련된 코드를 다른 클래스로 묶어서 정리함

하지만 그럼에도 캡슐이 깨지는 현상이 있을 수 있으며, 캡슐을 은닉화하여 해결할 수 있음

 

 


2021/01/24 3강 인스턴스(Instance) 메소드

캡슐화를 통해 데이터구조와 함수의 영역을 제한하여 오류의 범위를 한정함

 

기존의 함수의 인스턴스 전달

void main01() {
	list = new ExamList();
    	ExamList.inputList(list);
    	ExamList.printList(list);
    	ExamList.saveList(list);
}

구조화된 것을 가지고 (데이터의 실체를)객체화, 그런 객체를 가지고 함수를 호출합니다.
(주체가 되는)list를 이용하여 main02와 같이 처리합니다.

 

 

새로운 함수의 인스턴스 전달
*** 객체지향적인 함수 호출 방식으로의 변화

void main02() { 
	list = new ExamList(); 
    	list.inputList(); 
    	list.printList(); 
	list.saveList(); 
} 

main01과 같이 파라미터로 넘겨 받는 것이 아닌, 
 . 연산자를 통해 호출하여 전달받게 됩니다. 
인스턴스 함수를 통해, 인스턴스를 기본으로 넘겨받습니다. 
* list(야).입력(해)() 로 명령어처럼 해석해야 함

 

객체지향 프로그래밍(OOP) : Object Oriented Programming

역할로서의 객체이며, 객체에게 일을 시키는 형태

 

 


2021/01/24 4강 인스턴스(Instance) 메소드 구현하기

캡슐화를 통해 데이터구조와 함수의 영역을 제한하여 오류의 범위를 한정함

 

'BACK END > JAVA' 카테고리의 다른 글

ArrayList  (0) 2021.01.13
String.valueOf() vs toString()  (0) 2021.01.06
Model2 - 미니쇼핑몰 예제(상품)  (0) 2020.12.16
Model2 - 미니쇼핑몰 예제(회원가입)  (0) 2020.12.14
Model2 - 미니쇼핑몰 예제(인터페이스)  (0) 2020.12.14