
객체object란?
작용의 대상이 되는 쪽, 즉 현실 세계에서 구체적이거나 추상적인 사물을 의미한다.
예를 들어 구체적인 것으론 인간, 자동차, 등이 있고 추상적인 것으로는 축구, 직장 등이 있다. 이 모든 것을 아울러 객체라고 부른다.
소프트웨어 객체도 현실 속 객체와 비슷한 의미를 지닌다. 소프트웨어 객체는 상태를 필드(field)로, 동작을 메서드(method)로 정의한다. 소프트웨어 객체는 현실 세계의 객체를 필드와 메서드로 모델링한 것이다.
절차지향(procedural programming)과 객체지향(Object-Oriented Programming)
절차지향 프로그래밍procedural programming과 객체지향 프로그래밍object-oriented programming의 개념 및 특징, 차이점과 각 프로그래밍 방법이 발전하게 된 방향에 관하여 표로 정리 해보았다.
| 절차지향 | 객체지향 | |
| 개념 | 입력 데이터를 받아 처리 후 출력데이터를 생산하는 논리적인 절차 | 프로그램을 ‘객체’라는 기본 단위로 나눈 후 이들의 상호작용으로 서술 |
| 특징 | 순서에 맞춰 단계적 실행 순서와 흐름 중점 |
객체단위 프로그래밍 객체가 중심 |
| 변화 | 이러한 절차지향 프로그래밍 방법은 직관적이고, 규모가 작을 시 프로그래밍 및 이해도가 용이 할 수 있으나 소프트웨어의 규모가 커지며 한계에 부딫히게되고, 이를 고려해 등장한 것이 객체지향 프로그래밍 | |
객체와 클래스
어떠한 사물을 여러 개, 혹은 대량으로 제작할 때 틀이나 설계도가 필요하다.
이러한 틀이나 설계도에 해당하는 것이 객체지향프로그래밍의 클래스(class)이다.
이 클래스라는 틀로 인해 만들어진 객체를 해당 클래스의 인스턴스(instance)라고 한다.
<객체지향 언어의 특징>
캡슐화
캡슐화(encapsulation)는 관련된 필드와 메서드를 하나의 캡슐처럼 묶어 감추는 것을 의미한다.
그래서 캡슐화를 정보은닉(information hiding)이라고도 부른다.
캡슐화의 주 목적으로는 내부 데이터를 숨겨 외부 영향을 받지 않게끔 하는 것이다.
객체지향 언어 속 사용되는 클래스를 기준으로 외부에선 바깥으로 노출된 특정 메소드에만 접근 가능하며 클래스 내부에선 어떤 식으로 처리되는지 알지 못하게끔 한다.
상속
객체지향 프로그래밍에서는 자식클래스가 부모클래스의 메서드와 필드 등을 그대로 물려받을 수 있는데 이를 상속(inheritance)이라고 한다.
마치 자녀가 부모재산을 상속받듯 자식 클래스는 부모 클래스의 메서드, 필드 등을 사용하며 수정,추가 등도 가능하다.
다형성
다형성(polymorphism)은 하나의 변수, 함수등가 상황에 따라 메서드를 다르게 동작하게끔 구현하는 기술이다.
예를 들면 cat, eagle, fish는 모두 다르게 움직이고 행동한다.
하나의 Animal이라는 부모클래스의 move() 메서드를 각 자식 클래스에서 수정하면 동일한 move()라는 메시지를 전달 함에도 move():run, move():fly, move()swim 이렇게 동물마다 다른 결과가 나올 수 있도록 하는 프로그래밍 기술이 다형성이다.
클래스의 선언
수많은 상태와 동작들을 모두 포함하기는 어렵기 때문에 불필요한 속성을 제거하고 중요한 정보만 클래스로 표현하는 추상화(abstraction)과정이 필요하다.

정사각형 상자를 예시로 들어 설명을 해보면 정사각형 상자에는 길이, 재질, 크기등 많은 속성이 있지만 이러한 불필요한 속성을 제외하고 상자의 부피를 구하는 동작만 이용하여 길이로만 상자를 추상화 한다고 하자.

파일이름은 클래스 이름과 같아 야하고 box.java 클래스 파일을 컴파일하면 box.class 파일이 생성된다.
객체 생성과 참조 변수
객체를 생성할 때에는 new 연산자를 사용한다.
이 연산자를 사용하여 객체를 생성하면 생성한 객체의 주소를 반환한다.
[클래스이름 변수 = new 클래스 이름();]
이와 같이 변수 선언과 객체 생성을 동시에 할 수 있다.
클래스는 자바 데이터 타입 중 참조 타입이다.
new연산자를 통해 객체 생성 후 변수에 반환된 주소를 대입하면 변수가 생성된 객체를 참조한다.
필드와 지역변수
필드와 지역변수의 차이점에 대하여 표로 정리하여보았다.
| 필드 | 지역변수 |
| 기본값 O -> 초기화 없이 사용 가능 | 기본값 X -> 초기화 없으면 오류 발생 |
| 클래스 전체 사용 | 선언된 블록 내부에서만 사용 -> 선언된 위치 중요 |
| static, final을 포함한 모든 접근 지정자 지정가능 |
final로만 지정 가능 |
필드와 메서드 접근
메서드나 필드는 객체에 소속된 멤버이므로 다른 클래스의 멤버에 접근하기 위해서는 클래스의 객체를 먼저 생성해야 한다.
이때 [객체참조변수 . 멤버]를 사용한다. 여기서 마침표(.)는 객체와 객체 멤버를 연결해주는 연산자이다.
마침표의 연산자는 우선순위가 가장 높다.
외부 클래스 Box의 객체 myBox가 있다면 myBox의 객체 필드 length와 메서드 findArea()는 [myBox . length] [myBox . findArea()]로 접근할 수 있다.
여기서 length는 myBox에만 종속되므로 인스턴스 변수, findArea()는 특정 인스턴스를 생성한 후에만 호출할 수 있으므로 인스턴스 메서드 라고 한다.
접근자와 설정자
객체 지향 프로그래밍의 주요한 특징 중 하나는 캡슐화이다.
클래스의 모든 멤버를 private로 지정하게 되면 외부 클래스에서도 해당 클래스를 사용할 수 없다.
따라서 필요한 멤버는 외부 클래스가 사용할 수 있도록 공개해야한다.
이때 접근자getters와 설정자setters를 제공해야 한다.
예를 들어 length 필드를 위한 접근자와 설정자는 getLength()와 setLength()이다.
'Computer Science > language' 카테고리의 다른 글
| [assembly | dreamhack] - Quiz: x86 Assembly 2 writeup (0) | 2025.05.25 |
|---|---|
| [assembly] Assembly 함수, 시스템 콜 정리 (0) | 2025.05.25 |
| [assembly] Assembly 분기문, 반복문 (0) | 2025.05.24 |
| [assembly] Assembly 기본 문법 (0) | 2025.05.24 |
| [python] pycryptodome 모듈을 활용 한 AES 알고리즘 구현 (0) | 2025.05.24 |