객체지향 프로그래밍

조수경·2021년 9월 24일
0

JAVA

목록 보기
10/26

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

    • 객체는 실제 존재하는 대상, 클래스의 내용이 메모리에 올라간 것이 객체이며 그 과정이 객체 생성
    • 메서드는 코드를 모아놓은것
    • 프로그램을 단순히 코드의 연속으로 보는 것이 아니라 객체간의 상호작용으로 보는것
    • 코드의 재사용성이 높고 유지보수가 용이하다.

       package e_oop; //무조건 첫줄은 패키지 (클래스의 위치를 알려줌)
      
        public class SampleClass {//public은 접근제어자 이고 class를 붙히고 SampleClass클래스 이름이다.
      
      		      public static void main(String[] args) { //main이라는 메서드가 실행되는것
      			//클래스는 변수와 메서드로 구성할 수 있다.
      			int local = 10; //지역변수: 메서드 안에서만 사용하는 변수(메서드를 벗어나면 존재하지 않게됨)
      
      		      }
         int field;//전역변수: 클래스 전체 영역에서 사용하는 변수(메서드 밖에서 생성) / 초기화 하지 않아도 기본값으로 초기화됨
      
       
       - 메서드 : 변수를 가지고 할 일
       - 선언 방법 : 리턴타입 메서드명(파라미터) {} 
       - 파라미터(매개변수) : 실행에 필요한 정보 (일하기 위한 정보, 항상 필요한 것은 아님: 더해야 할 값이 파라미터) 
       //배열이나 클래스 등 타입만 맞으면 올수 있음
       - 리턴타입(반환타입) : 실행 후 돌려줘야하는 결과물(실행결과의 타입을 나를 호출한 곳에 알려주는 것, 항상돌려주는것이 아님)
       - 메서드를 작성할때 파라미터와 리턴타입을 잘 생각해야 함
       
       

    객체지향 작성해보기

       package e_oop;
     public class ClassMaker {
    
    
    	 //1.전역변수 하나를 선언 및 초기화 해주세요
    	int x = 0;
    
    	//2.리턴타입과 파라미터가 없는 메서드 하나를 만들어주세요
    	//3.메서드 안에서 전역변수를 출력해 주세요
    	void a(){
    		System.out.println(x);
    	}
    	//4.전역변수와 동일한 타입의 리턴타입이 있고 파라미터는 없는 메서드 하나들 만들기
    	//5.메서드 안에서 전역변수 리턴
    	int b(){
    		return x;
    	}
    	//리턴타입은 없고(void) 파라미터가 있는 메서드 하나 만들기
    	//메서드 안에서 파라미터 출력
    	void c(String s){
    		System.out.println(s);
    
    	}
            //int 타입의 리턴타입과 int타입의 파라미터 두개가 있는 메서드 하나를 만들기
    	//메서드 안에서 두 파라미터를 곱한 결과 리턴
    	int d(int x, int y){
    		return x * y;
    	   }

    }

설계도 만들기1

    package e_oop; 

    public class SampleClass {

    public static void main(String[] args) {
    int local = 10; 

}
      int field;
      String method1(int parameter){
      return parameter + " 를 받아 명령을 수행하고 결과물을 리턴하는 메서드"; 
      //문자가 숫자(parameter)와 결합했지만 문자열(리턴타입:String)로 결과값이 나옴
      //return: 값을 돌려주고 메서드를 종료시키는 역할이다.
      
      void method2(){ 
      //void는 비어있음을 의미 즉 리턴이 없는것 + 파라미터도 비어있음: 아무런값을 받지 않음
      System.out.println("파라미터도 리턴타입도 없는 메서드")
      return; 
      //void인 메서드의 리턴은 값을 넘겨주는 역할이 아니라 메서드를 종료시키는 역만 함
    }
    

리모콘과 TV 생성1

	SampleClass sc = new SampleClass(); 
         // 리모콘(참조변수): sc / tv(객체 생성): new SampleClass()
         // SampleClass를 메모리에 올리겠다. SampleClass 메모리의 주소가 sc에 올라감
	 
        System.out.println(sc.field); //주소를 가져와 변수를 출력(결과값 0)
    
	String returnValue = sc.method1(10);
         // String 타입의 값을 돌려받기 위한 변수 생성 
         // 10이 메서드로 들어가 값을 가져와서 변수에 저장됨 
         // returnValue는 여기서 생성하면서 만든것
	System.out.println(returnValue);
        sc.method2(); //호출만 해주면됨 값을 넘기지도 받지도 못함
	
    

설계도 2

    package e_oop; 

    public class SampleClass {

    public static void main(String[] args) {
    int local = 10; 

}
    int field;
    
    void flowTest1(){  //1번은 3번 호출
    	System.out.println("flowTest1 시작 : 1");
    	flowTest3(); //3을 호출하면 3으로 이동
    	System.out.println("flowTest1 종료 : 6");
    }
    
    void flowTest2(){
    	System.out.println("flowTest2 시작 : 3");
    	System.out.println("flowTest2 종료 : 4");
    }     //종료후 호출했던 곳으로 이동하여 실행
    
    void flowTest3(){ //3번은 1번 호출
    	System.out.println("flowTest3 시작 : 2");
    	flowTest2(); //2을 호출하면 2으로 이동
    	System.out.println("flowTest3 종료 : 5");
    }
    
}

리모콘과 TV 생성2

sc.flowTest1();
//1만 출력해도 모두 출력되게 메서드가 짜여짐
//리모콘(참조변수): sc

+, -, *, /, % 출력하기 설계도

package e_oop;

public class Calculator {

// +, -, *, /, %의 메서드로 만들어야함
// 파라미터와 리턴타입은 뭘로?
// 계산을 하려면 2개의 값이 필요 - 파라미터 2개
// 계산을 시킨사람이 결과를 알려면 return필요

double plus(double x,double y){
	return x + y;
}

double minus(double x,double y){
	return x - y;
}

double muti(double x,double y){
	return x * y;
}

double div(double x,double y){
	return x / y;
}

double rest(double x,double y){
	return x % y;
}

+, -, *, /, % 리모콘과 TV 생성3

 다음을 한줄씩 계산해서 최종 결과값을 출력해주세요
	1. 123456 + 654321
        2. 1번의 결과값 * 123456
	3. 2번의 결과값 / 123456
	4. 3번의 결과값 - 654321
	5. 4번의 결과값 % 123456
 
 Calculator calculator = new  Calculator(); 
// 리모콘:(참조변수) calculator / tv(객체 생성): new  Calculator()
	
 double result = calculator.plus(123456,654321); //계산해서 변수에 담기
 result = calculator.muti(result,123456);
 result = calculator.div(result,123456);
 result = calculator.minus(result,654321);
 result = calculator.rest(result,123456);
 System.out.println(result);
 

알바

package e_oop.restaurant;

public class Alba {

//메서드 생성 :알바가 할 일(보스가 알바에게 시킨일)-주문, 서빙, 계산
//파라미터: 일을 하기 위해 필요한 것(보스가 알바에게 주는 것)
//리턴타입: 일을 하고 난 후 돌려주는 것(알바가 보스에게 주는것)

//주문받기 위해 필요한 것은? 없음 - 파라미터 없음
//주문받은 후 보스에게 줄 것은? 주문서 - 리턴타입
String[] order() {
	System.out.println("주문 하시겠습니까?");
	return new String[]{"짜장면","탕수육"};//주문서
}
//서빙하기위해 필요한 것은? 음식 - 파라미터
//서빙 후 보스에게 줄 것은? 없음 - 리턴타입
void serve(String[] foods){
	System.out.println("맛있게 드세요.");
}
//계산하기 위해 필요한 것은? 주문서
//계산 후 보스에게 줄 것은? 없음
void pay(String[] order){
	System.out.println("2만원입니다. 안녕히가세요.");
   }
}

사장

package e_oop.restaurant;

    import java.util.Arrays;

     public class Boss {

      public static void main(String[] args) {
	   Alba alba = new Alba();
	
	   String[] order = alba.order();
	   System.out.println(Arrays.toString(order));
	
	   System.out.println("요리 만드는중....완성!");
	   String[] foods = {"완성된 짜장면","완성된 탕수육"};
	
	   alba.serve(foods);
	
	   alba.pay(order);

   }
 }
profile
신입 개발자 입니다!!!

0개의 댓글