객체 지향 프로그래밍 OOP

김범식·2021년 6월 6일
0

JAVA 수업

목록 보기
5/10

객체지향 프로그래밍

  • OOP의 장점
    • 실행이 빠름
    • 구조가 깔끔하고 명확
    • 코드를 DRY(Don't Repeat Yourself) 상태를 유지할 수 있다
    • 유지보수가 쉽다
    • 높은 재사용성

Class / Object(instance) / Method

  • Class <붕어빵 틀> : 같은 종류의 집단에 속하는 속성(변수)과 행위(메소드)를 정의한것

  • Object(instance) : 클래스의 속성을 가지고 있으면서 개별적인 특성과 행위 또한 가지고 있다

    • instance는 특정 객체가 어떤 클래스의 객체인지 관계 위주로 설명할 때 사용
  • Method : 클래스로부터 생성된 객체를 사용하는 방법. 객체를

Class 선언1

클래스 선언하기

Class 선언2

  • 생성자가 정의된 게 없다면, 자바 컴파일러가 디폴트 생성자를 생성해줌
    • 생성자 명은 반드시 클래스 명과 동일
  • 생성자 : 객체를 생성 하면서 해야할 일들, 하고싶은 일들을 강제(정의)하는 역할
    • ex) student 객체 생성 시 반드시 이름을 갖고 있어야 한다.

Class의 속성

  • 클래스의 특징을 나타냄

Class의 Rule

  • 클래스는 대문자로 시작한다.
  • 하나의 java 파일에는 하나의 클래스를 두는것이 원칙 이지만 여러개의 클래스가 존재할 수 있다.
    • BUT : Public Class는 단 하나이며, Public Class 이름과 자바 파일의 이름은 동일해야 함
  • 모든 클래스가 main method를 가질 필요가 없다
    • BUT : 프로그램내 한가지 메인 메써드는 필요하다.

용어정리

  • 객체 : OOP 프로그램의 대상,
  • 클래스

참고 : 자바의 메모리 공간

1) 코드 영역 - 실제 프로그램 코드가 적재되는 영역

  • java로 작성된 프로그램이 컴파일 후 바아너리 파일(.class)로 변환한 후 JVM을 통해 실행
  • 이 파일 내의 프로그램에 대한 전체적인 코드 자체가 올라가는 영역

2) 데이터 영역 - 프로그램이 실행되는 동안 항상 접근이 가능한 변수가 저장되는 영역(global variable)

3) 스택 영역 - 메서드 내에서 정의된 지역변수가 저장되는 메모리 영역

  • 함수의 호출은 자료구조 주의 하나인 스택 구조를 가짐
    • Stack <LIFO-Last In, First Out> : 가장 마지막에 들어간 것이 가장 먼저 나오는 구조
      (ex : 프링글스)
  • 함수는 다른 함수를 호출하고ㅡ 그 함수는 또 다른 함수를 호출함. 처리가 완료되면 그 결과물을 다시 자신을 호출한 함수에게 반환함.
  • 함수의 호출이 메모리에 차곡차곡 적재되고, 처리가 끝나면 메모리에서 해제됨.
  • 즉, 함수 호출을 위한 메모리 관리 방식이 스택의 동작방식과 유사하기 때문에 메서드 호출을 위한 데이터가 적재되는 영역을 스택 영역이라 칭함.

4) 힙 영역 - 동적 할당을 위한 영역

  • 동적할당 : 메모리에 얼만큼 할당할 지 모르는 상황에서.
    • 코드, 데이터, 스택 영역은 컴파일러가 미리 공간을 예측하고 할당(Garbage Colletor : GC) 할 수 있지만, 동적 할당은 어느 시점에 어느정도의 공간으로 할당될지 정확하게 예측할 수 없기 떄문에 프로그램 실행중에 결정된다.
  • new를 통해 생성하는 객체를 위한 공간.

OOP 추가(day03)

1) 클래스, 객체, 인스턴스의 의미

2) 상속

3) 다형성

4) 추상화 : 복잡함 속에서 필요한 관점만을 추출하는 행위

5) 부품화 : 프로그램은 객체가 모여 만들어짐

  • ex) 컴퓨터는 모니터, 키보드, 마우스 등의 부품이 모여 이루어 진것
  • 각 모니터, 키보드 마우스는 객체

6) 캡슐화, 은닉화 : 내부의 동작 방식을 숨기고 사용 방법만 노출

  • 사용자는 굳이 리모컨 동작 방식을 알 필요 없음

7) 인터페이스 : 연결 가능성, 약속

  • ex) 삼성, Lg 모니터는 연결 케이블이 정해진 규격에 맞게 제작되기 때문에 호환가능

은닉화(Imformation hiding - 정보은닉)

  • 클래스의 변수에 직접 접근하는 행위를 방지 하는 것
  • 클래스 변수의 직접 접근하는 경우 데이터의 무결성을 침범할 수 있음
    • 해당 변수를 private 으로 감춰두고 변수 값을 세팅하는 함수를 public으로 오픈해서 조건문 등의 처리를 통해 변수가 아무렇게나 쓰이는 경주를 방지함
  • 접근 제어자:
    a) public : 모든 Class에서 접근 가능
    b) private : 나의 Class 안에서만 접근 가능
    c) default : 같은 패키지 내에서 가능 (접근제어자 명시 없는경우 default제어자)
profile
starterdev

0개의 댓글