- [Java] 18. 객체 지향, 클래스, 인스턴스화2024년 04월 15일
- Song hyun
- 작성자
- 2024.04.15.:08
728x90반응형1. 객체지향이란? (OOP; Object Oriented Programming): 프로그래밍 패러다임 중 하나로, 실세계의 사물 또는
실체로 존재 가능한 것을 객체로 모델링하여 프로그램을 구성하는 방법이다.
-객체에는 속성(Properties)과 사물이 동작하는 기능(Methods)으로 이루어져 있다.
이들은 객체의 상태와, 객체가 수행할 수 있는 작업을 나타낸다.
(1) 객체의 속성(Properties): 객체의 특성, 상태, 데이터를 의미한다.
(2) 객체의 행동(Methods): 객체가 수행할 수 있는 작업, 기능을 의미한다.
2. 객체의 특징:
(1) 캡슐화(Encapsulation): 객체는 자신의 데이터와 그 데이터를 조작하는 메서드를 하나의 단위로 관리한다.
이를 통해 상세한 구현 내용을 숨기고(정보 은닉), 외부에서는 객체가 제공하는 메서드를 통해서만 상호작용할 수 있게 한다.
(2) 독립성: 객체는 독립적으로 존재하며, 각 객체는 고유의 속성과 메서드를 가진다.
객체 간에는 메세지를 통해 상호작용한다.
(3) 추상화(Abstraction): 필요한 부분만 추려내고, 불필요한 정보는 제거하여 복잡도를 관리할 수 있게 하는 핵심적인 개념이다.
추상화를 통해 핵심적인 정보만 남기면서, 애플리케이션을 더욱 효율적으로 만들 수 있다.
3. 클래스
(1) 클래스(Class): 객체를 생성하기 위한 템플릿, 혹은 설계도 역할을 한다.
클래스는 객체의 상태를 나타내는 필드(변수)와, 객체의 행동을 정의하는 메서드(함수)로 구성된다.
클래스는 데이터와, 그 데이터를 조작하는 코드를 묶어 놓은 컨테이너와 같습니다.
(2) 클래스를 만들 때의 규칙
-클래스의 이름은 대문자로 시작한다.
-파스칼 케이스(Pascal Case)와 카멜 케이스(Camel Case) 명명 규칙 사용하기.(3) 클래스를 인스턴스화(instance) 하다?
-프로세스/인스턴스화: 프로그램이 메모리를 할당받는 것.
-인스턴스(Instance): 실제 클래스 기반으로 생성된 객체. 이는 각각 다른 멤버 변수 값을 가지게 된다.-new 키워드와 생성자를 사용해 인스턴스를 생성하게 된다.
**인스턴스화 되는 과정
1. 컴파일러가 변수를 받으면, main이라는 메모리 공간을 할당받는다.2. 참조 타입은 주소값을 통해 '힙'이라는 동적 메모리 공간에 들어가게 된다.
3. 참조 타입은 주소값이 메인에 담김 -> 주소값을 통해 힙에 객체 속성이 저장된다.
4. . 연산자를 통해서 접근할 수 있다.*참조 타입(Reference Type)=대문자로 시작하는 자료형 (ex: String)
-변수 괄호 안에 변수명이 아닌, 주소 값이 들어간다.*동적 메모리 영역 (Heap)=객체의 멤버 변수가 저장되는 곳!
-생성된 인스턴스는 동적 메모리(Heap memory)에 할당된다.
-C,C++에서는 사용한 동적 메모리를 프로그래머가 해제시켜야 한다. (free(), delete)
-Java에서는 Gabage Collectot가 주기적으로 사용하지 않는 메모리를 수거한다.
-하나의 클래스로부터 여러개의 인스턴스가 생성되고, 각기 다른 메모리 주소를 가지게 된다.
4) 클래스를 만드는 이유
- 클래스를 만드는 것은 금형을 만드는 것과 같다.
한 번 클래스를 만들면, 같은 형태의 객체들을 쉽게 만들 수 있다. (붕어빵 틀-붕어빵)
연습문제 1.
게임 내에서 사용할 전사 캐릭터 정보를 입력받을 수 있도록,
Warrior 클래스를 만들고, Warrior 클래스를 2개 만든 뒤 출력하시오.
1. Warrior 클래스 만들기
-우선 Warrior.class 파일을 만든다.
-Warrior.class 파일에 전사 캐릭터를 만드는 데 필요한 정보(캐릭터 이름, 키, 몸무게, 피부색, 체력...)를 입력한다.
2. Warrior 클래스 2개 만들기
-Warrior warrior1 = new Warrior(); 는 새 Warrior 클래스를 만든다.
-Warrior.name / Warrior.health 등을 통해 클래스 내부의 값(속성)에 상수를 할당한다.
-System.out.println(클래스명. 속성명)을 통해 값을 출력한다.
package ch05; public class Warrior { //속성 String name; double height; double weight; String color; int health; int attackPower; // 공격력 int defensePower; // 방어력 }
package ch05; public class WarriorMainTest { // 메인 함수(코드의 시작점) -> JVM Stack (메모리 할당) public static void main(String[] args) { // new -> 예약어 // () -> 생성자 Warrior warrior1 = new Warrior(); // 메모리에 올라가면 객체라고 부른다. // 객체는 heap이라는 동적 메모리 영역에 올라간다. // 객체의 접근은 . 연산자를 통해서 접근할 수 있다. Warrior warrior2 = new Warrior(); warrior1.name = "티모"; warrior1.health = 100; warrior1.attackPower = 30; warrior1.defensePower = 1; System.out.println("--------------"); warrior2.name = "야스오"; warrior2.health = 120; warrior2.attackPower = 20; warrior2.defensePower = 2; System.out.println("--------------"); System.out.println(warrior1.name); System.out.println(warrior2.name); } }
728x90반응형'Java > 기본 개념 및 클래스' 카테고리의 다른 글
[Java] 20. 함수, 인스턴스화, 메서드 연습 문제 (0) 2024.04.16 [Java] 19. 런타임 데이터 영역 (Run time data Area) (0) 2024.04.15 [Java] 17. 함수와 메서드 (0) 2024.04.15 [Java] 16. 이중 for문: 별 그리기 문제 (0) 2024.04.15 [Java] 17. 콘솔에서 입력 받기 : Scanner 클래스 (0) 2024.04.15 다음글이전글이전 글이 없습니다.댓글