본문 바로가기
SSAFY/Daily

20220118 JAVA 객체지향 프로그래밍

by Hunveloper 2022. 1. 18.
728x90

객체지향 프로그래밍이란? Object Oriented Programming

   주변의 많은 것들을 객체화해서 프로그래밍 하는 것

 

객체지향 프로그래밍의 장점

   블록 형태의 모듈화된 프로그래밍

      신뢰성 높은 프로그래밍 가능

      추가/수정/삭제가 용이

      재 사용성이 높음

Class vs Object

   현실의 객체가 갖는 속성과 기능은 추상화(abstraction) 되어 클래스에 정의됨

   클래스는 구체화되어 프로그램의 객체(instance, object)가 됨

   객체는 그 자체가 사물임, 하지만 프로그래밍에서는 그 자체가 Data임

 

객체 생성과 메모리

   Class area : 클래스 원형 로딩

      - Field 정보

      - Method 정보

      - 타입 정보

      - 상수 풀

   Method stack : 메서드의 실행 공간

      Thread 별로 별도 관리

      메서드 호출 순서대로 쌓이는 구조

      메서드 프레임에 로컬변수도 쌓이는 구조

      로컬변수는 선언된 영역을 벗어나면 삭제

   Heap : 객체를 저장하기 위한 영역

      Thread에 의해 공유

      생성된 객체는 프로그래머가 삭제할 수 없고 GC만이 제어 가능

   

메모리 할당 형태

클래스영역 스택 영역 힙 영역

클래스영역 스택 영역 힙 영역
Class가 지정되있는 부분 클래스로 만들어진 객체 데이터 값들이 저장되는 위치
Person
- name, age, isHungry
- eat ( ), work ( )

PersonTest
- main ( )
Person person2
    [ 0x300 ]
Person person1
    [ 0x100 ]
[ 0x300 ]
  [ 0x400 ] ( name ) → [ 0x400 ] “임꺽정”
  0 ( age )
  true ( isHungry )
[ 0x100 ]
  [ 0x200 ] ( name ) → [ 0x200 ] “홍길동”
  0 ( age )
  false ( isHungry)
Person    

인스턴스 멤버 변수의 특징

   선언 위치 : 클래스 { } 영역에 선언

   변수의 생성 : 객체가 만들어진 때 객체 별로 생성됨

     생성 메모리 영역 : heap

   변수의 초기화 : 타입 별 default로 초기화

   변수에서의 접근 : 객체 생성 후 객체 이름으로 접근, ‘.’을 이용하여 접근 ex) p1.name = “이름”;

   소멸 시점 : Garbage Collection에 의해 객체가 없어질 때

클래스 멤버 변수의 특징

   선언 위치 : 클래스 { } 영역에 선언되며 static 키워드를 붙임

   변수의 생성 : 클래스 영역에 클래스 로딩 시 메모리 등록

     Static은 객체 생성과 무관하게 메모리에 할당됨

   변수의 초기화 : 타입 별 default로 초기화

   변수에서의 접근 : 객체 생성과 무관하게 클래스 이름으로 접근

   소멸 시점 : 프로그램 종료 시

지역 변수 & 파라미터 변수

   선언 위치 : 클래스 영역의 { } 이외에 모든 중괄호 안에 선언되는 변수들

   변수의 생성 : 선언된 라인이 실행될 때

     생성 메모리 영역 : thread 별로 생성된 stack 영역

   변수의 초기화 : 사용하기 전 명시적 초기화 필요

   변수에서의 접근 : 외부에서는 접근이 불가

   소멸 시점 : 선언된 영역인 { } 을 벗어날 때

 

메서드

   메서드란 : 현실의 객체가 하는 동작을 프로그래밍화

   메서드의 존재 이유

     반복적으로 사용되는 코드의 중복 방지

     코드의 양을 줄일 수 있고 유지 보수가 용이함

   메서드의 작성 방법

     Modifier Return_Value_Type Method_Name (Argument_type argument variable)

     제한자 리턴타입 메서드이름 ( 타입 변수명, 타입 변수명 .....)

 

선언부

   리턴 타입 : 호출한 곳으로 호출 결과를 반환하는 값의 형식, print만 할시 void 사용

   메서드 이름 : 호출할 함수의 이름을 지정 ( 의미 있는 이름을 사용)

   파라미터 목록 : 메서드 호출 시점에 넘기는 변수들

     Variable arguments : 몇개의 인자가 들어올 지 예상 할 수 없거나 가변적일 경우

구현부

   중괄호 내에서 처리해야 하는 내용. 즉, 로직을 작성

   마지막에는 선언된 리턴 타입에 대항하는 값을 return 해야함

메서드 호출

   메서드를 호출할때는 메서드의 선언부에 맞춰 호출해야 함

   메서드 접근시 static 과 non static 상태를 구분해서 호출

메서드 호출 스택

   각각의 메서드 호출시 메서드 동작을 위한 메모리 상자를 하나씩 할당

   A 메서드에서 새로운 메서드 B호출 시 B 실행을 위한 메모리 상자를 쌓음

   Java는 call by value → 값을 복사해서 argument로 넘김

메서드 오버로딩

   overloading : 동일한 기능을 수행하는 메서드를 추가 작성

     Argument형태가 달라지면 동일한 메서드 이름 사용 가능 : 중복코드에 대한 효율적 관리

생성자

   객체를 생성할 때 호출하는 명령어

     Person p1 = new Person ( );

   메서드와 비슷하지만 리턴 타입이 없고, 이름은 클래스 이름과 동일

   제한자 클래스명 ( 타입 변수명, 타입 변수명 .....)

728x90
728x90

'SSAFY > Daily' 카테고리의 다른 글

20220126 JAVA I/O & Stream  (0) 2022.02.04
20220125 JAVA 예외처리  (0) 2022.02.04
20220124 JAVA 추상클래스  (0) 2022.02.04
20220120 JAVA 생성자 및 상속  (0) 2022.01.20
20220117 JAVA 기초수업  (0) 2022.01.17

댓글