부트캠프

Java 객체지향 프로그래밍 기초

hunm719 2022. 12. 27. 22:45

<객체지향 프로그래밍이란?>

'모든 실재(實在)하는 어떤 대상'을 프로그래밍 언어에서는 객체(Object)라고 부른다.


객체지향적 프로그래밍은 프로그래밍에서 필요한 데이터를 한 데 모아 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 협력과 유기적인 상호작용을 통해 특정 기능을 구성하는 프로그래밍 방법론

 *요약하면 코드들의 결합도를 낮춰 변화와 확장에 유연하게 대응하는게 목적


-장점 : 프로그램 개발 및 유지 보수에 드는 비용과 시간을 획기적으로 줄일 수 있고, 객체를 통해 데이터를 관리하여 데이터를 손실 없이 관리하기에 용이

 

1.클래스(Class) : 객체를 정의한 '설계도(blueprint)' 또는 '틀(frame)'

 *클래스는 객체 그 자체가 아니라 단지 객체를 생성하는 데 사용되는 하나의 틀임.
 *집의 설계도가 집 그 자체가 될 수 없는 것처럼 클래스 또한 객체 그 자체가 될 수 없음.

 

1-1.인스턴스(instance) : 클래스를 통해 생성된 객체, 클래스로부터 객체를 만드는 과정은 인스턴스화(instantiate)라 지칭.
 *인스턴스와 객체는 같은 말이라 차이를 두는 것에 큰 의미는 없지만 구분하자면 객체는 모든 인스턴스를 포괄하는 넓은      의미를 가지고 있는 반면, 인스턴스는 해당 객체가 어떤 클래스로부터 생성된 것인지를 강조함.

인스턴스

1-2.클래스의 구성요소와 기본 문법

 *클래스명은 주로 대문자로 시작하는 것이 관례

 

public class ExampleClass {
        int x = 10; // (1)필드
        void printX() {...} // (2)메서드
        ExampleClass {...} // (3)생성자
        class ExampleClass2 {...} // (4)이너 클래스


(1) 필드 - 클래스의 속성을 나타내는 변수. 자동차로 예를 들면 모델명, 컬러, 바퀴의 수 등이 포함.
(2) 메서드 - 클래스의 기능을 나타내는 함수. 자동차를 예로 들면 시동하기, 가속하기, 정지하기 등이 포함.
(3) 생성자 - 클래스의 객체를 생성하는 역할
(4) 이너 클래스 - 클래스 내부의 클래스를 의미

 *위의 구성 요소들 중 생성자를 제외한 나머지 3가지 요소를 클래스의 멤버(member)라 부름.

 

2.객체(Object)

객체는 크게 속성(field)과 기능(Method)이라는 두 가지 구성요소로 이루어짐.

자동차 하나를 객체로 간주하고 이 객체와 관련한 속성과 기능을 간단히 정의해보자

자동차의 속성과 기능

2-1.객체 생성 방법

 *클래스명 참조_변수명; // 인스턴스를 참조하기 위한 참조변수 선언
 *참조_변수명 = new 생성자(); // 인스턴스 생성 후, 객체의 주소를 참조 변수에 저장


*new 키워드와 생성자를 통해 클래스의 객체를 생성한다는 것은 해당 객체를 힙 메모리에 넣고 그 주소값을 참조변수에 저장하는 것과 같음.

2-2.생성된 객체 활용방법 =  .(포인트 연산자)라고도 불리는데, 해당 위치에 있는 객체 안을 보라는 의미.

 *참조_변수명.필드명 // 필드값 불러오기
 *참조_변수명.메서드명() // 메서드 호출

 

 

3.필드(Field) : ‘클래스에 포함된 변수'를 의미하는 것으로 객체의 속성을 정의할 때 사용


(1)클래스 변수(cv, class variable) : static 키워드가 함께 선언된 것, 클래스 변수는 독립적인 저장 공간을 가지는 인스턴스 변수와 다르게 공통된 저장공간을 공유함.
(2)인스턴스 변수(iv, instance variable) : static 키워드가 없이 선언된 것, 인스턴스 변수(iv)는 인스턴스가 가지는 각각의 고유한 속성을 저장하기 위한 변수로 new 생성자() 를 통해 인스턴스가 생성될 때 만들어짐.
(3)지역 변수(lv, local variable) : 위 두 가지 변수 유형에 포함되지 않고 메서드 내에 포함된 모든 변수, 지역변수는 메서드 내에 선언되며 메서드 내({} 블록)에서만 사용가능한 변수

인스턴스 변수와 클래스 변수의 차이

*한 클래스로부터 생성되는 모든 인스턴스 들이 특정한 값을 공유해야하는 경우에 주로 static 키워드를 사용하여 클래스 변수를 선언
*클래스 변수는 인스턴스 변수와 달리 인스턴스를 따로 생성하지 않고도 언제라도 클래스명.클래스변수명 을 통해 사용이 가능
*직접 초기화하지 않으면 값을 출력할 때에 오류가 발생하는 지역변수와는 다르게 필드 변수는 직접적으로 초기화를 실행하지 않더라도 강제로 초기화가 이루어짐.(메모리의 저장위치 차이)

 

3-1.static키워드
static은 클래스의 멤버(필드, 메서드, 이너 클래스)에 사용하는 키워드로, 해당 키워드가 붙어있는 멤버를 ‘정적 멤버(static member)’라고 부르고 static이 붙어있지 않은 인스턴스 변수와 구분함.


 *인스턴스 멤버는 반드시 객체를 생성한 이후에 변수와 메서드에 접근하여 해당 멤버를 사용가능한 반면, static 키워드로    정의되어 있는 클래스 멤버들은 인스턴스의 생성 없이도 클래스명.멤버명 만으로도 사용이 가능함.

 

4.메서드(Method) : 특정 작업을 수행하는 일련의 명령문들의 집합
-메서드 시그니처(method signature) : 머리에 해당
-메서드 바디(method body) : 몸통에 해당

 

public static int add(int x, int y) { // 메서드 시그니처
int result = x + y; // 메서드 바디
return result;
}

위의 예시를 하나씩 나누어보면,
(1)public : 자바제어자(이후 학습할 내용)
(2)int : 반환타입
(3)add : 메서드 명(관례적으로 소문자로 표시)
(4)int x, int y : 매개 변수(해당 작업을 수행하기 위해서 필요한 재료)
(5)int result = x + y; : 메서드 바디(수행할 작업)

 

최종적으로 메서드명이 add 인 메서드이며 int 타입 2개의 값(x 와 y )을 받아 더한다음 int 타입의 결과값을 반환하는 메서드라 정리할 수 있음.
 *만약 메서드의 반환타입이 void가 아닌 경우에는 메서드 바디({})안에 반드시 return문이 존재해야 함.
 *반환 타입이 void인 경우는 반환 값이 없는 메서드를 의미함(=return문이 없음).

 

+메서드도 클래스의 멤버이므로 클래스 외부에서 메서드를 사용하기 위해서는 먼저 인스턴스를 생성해야함. 인스턴스를 생성한 후에 앞서 보았던 것처럼 포인트 연산자(.)를 통해 메서드를 호출할 수 있음.
+클래스 내부에 있는 메서드끼리는 따로 객체를 생성하지 않고도 서로를 호출할 수 있음.
+메서드 호출 시 괄호() 안에 넣어주는 입력 값을 ‘인자(argument)’라고 하는데, 인자의 개수와 순서는 반드시 메서드를 정의할 때 선언된 매개변수와 일치되어야 함.

4-1.메서드 오버로딩(Method Overloading) : 하나의 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것

아래의 두 조건을 모두 만족시켜야 함.
(조건1)같은 이름의 메서드명
(조건2)매개변수의 개수나 타입이 다르게 정의되어야합
 *반환 타입은 오버로딩이 성립하는 데에 영향을 주지 못함.

-장점 : 하나의 메서드로 여러 경우의 수를 해결할 수 있다는 것

 

 

이미지 및 내용 출처 - code states

'부트캠프' 카테고리의 다른 글

Java 객체지향 프로그래밍 심화  (3) 2022.12.29
Java 객체지향 프로그래밍 기초 2  (0) 2022.12.28
Java 배열  (0) 2022.12.26
Java 조건문 - 반복문  (1) 2022.12.23
Java 연산자 및 조건문  (1) 2022.12.22