[TIL]객체지향 프로그래밍

yh·2022년 9월 6일
0

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

  • 실제 사물의 속성과 기능을 분석 후 이것을 프로그래밍의 변수와 함수로 정의한것
  • 프로그램 개발 및 유지 보수에 드는 비용과 시간을 줄이고 객체를 통해 데이터를 관리하여 데이터 손실없이 관리하기 용이함

클래스(Class)

  • 객체를 정의한 설계도 또는 틀, 다만 클래스는 객체 그자체가 아니라
    객체를 생성하는데 사용되는 하나의 틀

클래스의 구성요소와 기본 문법

public class ExampleClass{
	int x = 10;		// 필드
    void printx(){...}	// 메서드
    EampleClass{...}	// 생성자
    class EampleClass{...}	// 이너클래스

구성 요소중 생성자를 제외한 나머지 3가지 요소를 클래스의 멤버라 칭함


객체(Object)

  • 속성 과 기능이라는 두가지 구성요소로 이뤄져있다

    객체의 생성방법

     클래스명 참조_변수명 = new 생성자();

  • person : 클래스영역 안에 들어가있음

  • p : 참조변수로 스택 영역 안에 들어있음

  • new : 힙 메모리에 저장

  • Person() : 생성자 → 객체


    필드

  • 클래스에 포함된 변수를 의미

    1. 클래스 변수
    2. 인스턴스 변수
    3. 지역 변수
class Example{
	int a;	// 인스턴스 변수
    static int b;	//클래스 변수
    
    void metod(){
    int c = 0;	// 지역 변수 , {}블록 안에서만 사용
    }
 }
  1. 클래스 변수

    • static 이라는 키워드를 통해 선언
    • 인스턴스 변수와 달리 공통된 저장공간을 공유
    • 인스턴스를 따로 생성하지 않아도 언제든 클래스명.클래스변수명 을 통해 사용 가능
  2. 인스턴스 변수

    • 인스턴스가 가지는 각각의 고유한 속성을 저장하기 위한 변수로 new 생성자() 를 통해 인스턴스가 생성될때 만들어진다.
    • 힙 메모리의 독립적인 공간에 저장되고 객체의 고유한 개별성 가진다
  3. 지역 변수

    • 매서드 내에 선언되며 메스드 내 {} 에서만 사용 가능한 변수

    • 스택 메모리에 저장 되어 메서드 종료 된 즉시 함께 소멸

      	+ 초기값 설정 필수

      static 키워드

      public class StaticTest{
      	psvm{
          	StaticField staticfield1 = new StaticField();	// 객체생성
              StaticField staticField2 = new StaticField();
              
              staticField1.num1 = 100;
              staticField2.num1 = 1000;
              
              System.out.println(staticField1.num1);	//100출력
              System.out.println(staticField2.num1);	// 1000출력
              
              staticField1.num2 = 150;
              staticField1.num2 = 1500;
              
              System.out.println(staticField1.num2);	//1500 출력
              System.out.println(staticField2.num2);	//1500 출력
              
      				}
      }
      
      class StaticField{
      	int num1 = 10;
          staic int num2 = 15;
      			}
    • num1 은 인스턴스 변수이고 num2는 클래스 변수여서 같은 값을 갖게 된다.


    매서드

    특정 작업을 수행하는 일련의 명련문들의 집합

    puvlic static int add(int x, int y){	// 메서드 시그니처
    	int result = x+y;	//메서드 바디
       return result;
    }
  • 반환타입이 int여서 return 값이 필요 하지만 void일 경우에는 return 값 불 필요


    메서드 오버로딩

    하나의 클래스 안에 같은 이름의 메서드를 여러개 정의한 것

  • 쓰는 이유는 하나의 메서드로 여러 경우의 수를 해결 가능

  • 오버로딩 성립 조건

    • 메서드의 이름이 같아야 함

    • 매개변수의 개수 또는 타입이 달라야함

      public class Overloading {
         public static void main(String[] args) {
             Shape s = new Shape(); // 객체 생성
      
             s.area(); // 메서드 호출
             s.area(5);
             s.area(10,10);
             s.area(6.0, 12.0);
         }
      }
      class Shape {
         public void area() { // 메서드 오버로딩. 같은 이름의 메서드 4개.
             System.out.println("넓이");
         }
         public void area(int r) {
             System.out.println("원 넓이 = " + 3.14 * r * r);
         }
      
         public void area(int w, int l) {
             System.out.println("직사각형 넓이 = " + w * l);
         }
      
         public void area(double b, double h) {
             System.out.println("삼각형 넓이 = " + 0.5 * b * h);
         }
      }
      //출력값
      넓이
      원 넓이 = 78.5
      직사각형 넓이 = 100
      삼각형 넓이 = 36.0

      느낀점

      개념 공부하면서 각 개념은 이해가 되는데 막상 이것을 어디에 써야할지 이해가 잘 안되는데 블로깅을 하면서 이해가 한층 더
      잘되서 다행이다...

0개의 댓글