Java OOP - 기초

hyoreal·2022년 8월 25일
0

[JAVA]

목록 보기
2/11
post-thumbnail

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

  • 객체 (Object) : 모든 실재(實在)하는 어떤 대상

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

    • 특정 객체에 속성(Field)과 기능(Method)을 넣어 객체들의 상호작용을 통해 특정 기능을 구성
  • 객체지향 프로그래밍 장점

    • 유지보수 용이
    • 확장성 좋음
    • 코드 재사용성
    • 생산성 향상

클래스와 객체

  • 클래스 (Class) : 객체를 만들기 위한 설계도, 틀

  • 인스턴스 (Instance) : 클래스를 통해 생성된 해당 객체. (해당 데이터)

  • 인스턴스화 : 클래스로부터 객레를 만드는 과정

  • 객체 (Object) : 모든 인스턴스를 포괄하는 의미.

  • 클래스 (Class) 구성요소

    • 필드 (Field) : 클래스의 속성을 나타내는 변수
    • 메서드 (Method) : 클래스의 기능을 나타내는 변수
    • 생성자 (Constructor): 클래스의 객체 생성 역할
    • 이너 클래스 (Inner Class) : 클래스 내부의 클래스
      • 필드, 메서드, 이너클래스를 멤버(member)라고 한다
  • 객체의 생성방법

    class CarTest {
    	public static void main(String[] args) {
        //클래스명 참조변수명;  // 인스턴스 참조 위한 참조변수 선언
        //참조변수명 = new 생성자(); // 인스턴스 생성 후, 객체주소 참조
      
      	Car bus = new Car();
          Car taxi = new Car();
          
          Car tractor; // 선언
          tractor = new Car(); // 할당 및 초기화
      }
    }
    • 스택영역 (Stack Area)

      • 참조변수를 저장
      • 지역변수 저장
    • 클래스 영역 (Class Area)

      • 클래스를 저장
      • 객체 멤버 중 메서드를 클래스 영역 내부 인스턴스 메서드 영역에 저장하여 메서드를 공유하여 사용
    • 힙 메모리 영역 (Heap Area)

      • 생성자로 만들어진 객체 저장
      • 객체 내부에는 클래스의 멤버 위치. (필드, 이너클래스)
      • 멤버 중 메서드는 클래스영역내부에 위치

필드 (Field)

  • 필드 (Field) : 클래스에 포함된 변수

    • 클래스 변수 (cv, class variable)
      • static 키워드가 함께 선언된 변수
      • 같은 클래스끼리 공유
      • 클래스명.클래스변수 형태로 할당 가능
      • 인스턴스 없이 값 할당 가능
    • 인스턴스 변수 (iv, instance variable)
      • static 키워드가 없이 선언된 변수
      • 인스턴스마다 가지는 고유한 값
      • 객체.인스턴스변수 형태로 할당
    • 지역 변수 (lv, local variable)
      • 필드에 포함 X
      • 메서드 내에 포함된 모든 변수
      • 특정 범위 내에서만 사용 가능
    class Example { // => 클래스 영역
    	int instanceVariable; // 인스턴스 변수
      static int classVariable; // 클래스 변수 (static 변수. 공유 변수)
      
      void method() { // => 메서드 영역
      	int localVariable = 0; // 지역 변수. {}블록 안에서만 유효
      }
    }

메서드 (Method)

  • 메서드 (Method) : 특정 작업을 수행하는 일련의 명령문 집합

    자바제어자 반환타입 메서드명(매개변수) { // 메서드 시그니처
    	메서드 내용 // 메서드바디
    }
    
    public class Example {
    	
       // 매개변수 O 반환값 O
       public static int add(int x, int y) { //메서드 시그니처
       	int result = x + y; //메서드 바디
           return result;
           // 반환값이 있을땐 return문이 있어야한다
       }
       
       // 매개변수 X 반환값 X
       public static void print() {
       	System.out.println("매개변수없어요");
           System.out.println("반환값없어요");
       }
       
       // 매개변수 O 반환값 X
       public static void printadd(int x, int y) {
       	 System.out.println("반환값은 없지만 계산할수있어요");
            System.out.println("x + y = " + (x + y));
       }
       
       // 매개변수 X 반환값 O
       public static int justReturn() {
           return 10;
       }
    }
  • 메서드 호출

    • 메서드도 클래스의 멤버이므로 클래스의 외부에서 사용하기 위해 인스턴스생성
    • 포인트 연산자 . 을 통해 호출
    • 클래스 내부에서 사용 시 객체생성하지 않고도 호출 가능
    • 메서드 호출 시 () 안에 입력값(인자, argument)은 메서드 선언시 매개변수와 일치해야함
    Example example = new Example();
    
    System.out.println(example.add(5,10));
    System.out.println(example.justReturn());
    
    > 출력
    > 15
    > 10
  • 메서드 오버로딩 (Method Overloading)

    • 하나의 클래스 안에 같은 이름의 메서드를 여러개 정의하는 것
    • 장점 : 하나의 메서드로 여러 경우의 수 해결
    • 같은 이름의 메서드명 && 매개변수의 타입이나 개수가 달라야함
    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

생성자 (Constructor)

  • 생성자 (Constructor) : 인스턴스 변수들을 초기화하는데에 사용되는 특수한 메서드.

    • ❗인스턴스 생성을 담당하는 것은 new키워드
    • 생성자명은 클래스명과 같아야함
    • 생성자는 리턴타입 없음
    • 지정하지 않을 시, 자바 컴파일러가 기본 생성자를 자동으로 생성해줌
    • 오버로딩 가능
    public class ConstructorExample {
    	public static void main(String[] args) {
      	Constructor con1 = new Constructor();
          Constructor con2 = new Constructor("Hello World);
          Constructor con3 = new Constructor(5, 10);
      }
    }
    
    class Constructor {
    	Constructor() { // (1) 생성자 오버로딩
      	System.out.println("1번 생성자");
      }
      
      Constructor(String str) {
      	System.out.println("2번 생성자");
      }
      
      Constructor(int a, int b) {
      	System.out.println("3번 생성자");
      }
    }
  • 기본 생성자(Default Constructor) : 매개변수가 없는 생성자

  • this.변수 키워드

    • 만들어진 객체 안에서 필드값을 불러올때 구분을 위해 사용
    class Coffees{
      static String coffeeName1 = "Ice Americano"; // class 변수
      String coffeeName2; // 인스턴스 변수
      int price;
      
      Coffees() {} // 기본 생성자
      
      Coffees(String coffeeName2, int price) {
      	this.coffeeName2 = coffeeName2;
          this.price = price;
      }
      
    }
  • this() 메서드

    • 자신이 속한 클래스에서 다른 생성자를 호출할때 사용
    • 생성자 내부에서만 사용 가능
    • 생성자의 첫 줄에 위치해야함
    public class Test {
    	public static void main(String[] args) {
      	Example ex1 = new Example();
          Example ex2 = new Example(5);
      }   
    }
    
    class Example {
    	public Example() {
      	System.out.println("Example의 기본 생성자 호출");
      };
      
      public Example(int x) {
      	this();
          System.out.println("Example의 두번째 기본 생성자 호출");
      }
    }
    
    > 출력
    > Example의 기본 생성자 호출
    > Example의 기본 생성자 호출
    > Example의 두번째 생성자 호출

내부클래스 (Inner Class)

  • 내부 클래스 (Inner Class) : 클래스 내에 선언된 클래스

    • 외부 클래스와 내부 클래스가 서로 연관되어있을 때 사용
    • 외부 클래스의 멤버에 쉬운 접근 가능
    • 코드 복잡성 ↓
    • 외부로 불필요한 데이터 노출 방지 (객체지향 원칙 캡슐화)
    종류선언 위치사용 가능 변수
    인스턴스 내부 클래스 (Instance Inner Class)멤버 내부 클래스외부 인스턴스 변수, 외부 전역 변수
    정적 내부 클래스 (Static Inner Class)멤버 내부 클래스외부 전역 변수
    지역 내부 클래스 (Local Inner Class)외부 클래스의 메서드 혹은 초기화 블럭 안외부 인스턴스 변수, 외부 전역 변수
    익명 내부 클래스 (Anonymous Inner Class)클래스 선언 + 객체 생성을 같이하는 일회용 익명 클래스외부 인스턴스 변수, 외부 전역 변수
profile
좌충우돌 코린이 성장기

0개의 댓글