Object(객체)
- 데이터(속성)와 해당 데이터를 처리하는 방법(메소드)을 포함하는 프로그래밍의 기본 단위
객체 지향 프로그래밍
- OOP (Object-Oriented Programming)
더보기
더보기
//객체 지향 프로그래밍의 예시
//ex) 학교 관리 '시스템' 구축
//학생 객체
//: 학생의 이름, 학번, 수강 과목 등의 데이터
//: 성적 조회, 수강 신청 등의 메소드
//교수 객체
//: 교수의 이름, 연구 분야, 담당 과목 등의 데이터
//: 강의 계획서 업로드, 성적 입력 등의 메소드
//수업 객체
//: 과목명, 강의 시간, 강의실 등의 데이터
//: 강의 자료 업로드, 출석 체크 등의 메소드
객체 지향 프로그래밍의 주요 개념
1. 클래스
- 객체를 생성하기 위한 템플릿, 데이터(속성)와 메소드(행동)을 정의
2. 객체(Object)
- 클래스의 인스턴스, 실제로 메모리에 할당되어 동작하는 구체적인 엔티티
3. 상속(Inheritance)
- 한 클래스(부모)의 속성과 메소드를 다른 클래스(자식)가 받아서 사용하는 기능
4. 다형성(Polymorphism)
- 같은 메소드 호출이 다른 클래스의 객체에 대해 다른 방식으로 실행
5. 캡슐화(Encapsulation)
- 객체의 데이터를 외부로부터 숨기고, 내부의 메소드를 통해서만 해당 데이터를 조작할 수 있게 하는 것
6. 추상화(Abstraction)
- 복잡한 세부사항을 숨기고 사용자에게 필요한 정보만을 제공
객체지향 프로그래밍의 장점(중요성)
- 재사용성 증가
- 유지보수성 증가
- 확장성 증가
자바(JAVA)에서의 객체 지향 프로그램
- 코드의 모든 구조가 객체로 표현 가능
- 프로그램의 유연성과 모듈성 증
객체 지향 프로그래밍 - 클래스와 객체
1. 클래스(Class) 정의
- 객체를 만들기 위한 템플릿
- 객체의 상태(속성)와 행동(메서드)을 정의
- 실제 데이터나 코드 X, 데이터와 기능의 구조를 정의하는 하나의 개념적인 틀
- class 키워드를 사용하여 정의
2. 객체(Object) 정의
- 클래스에 정의된 속성과 메서드를 가지고 있는 '실체'
- 클래스를 기반으로 생성, 클래스의 인스턴스라고 불림
- 각 객체는 독립적인 상태와 행동을 가짐
- 다른 객체와 상호작용 가능
클래스 선언 방법
더보기
더보기
// 클래스 선언 방법
// [접근제한자] class ClassName {
// 속성 & 메서드
// }
// : 접근 제한자(제어자)는 생략 가능
// >> 클래스의 가시성을 정의 (접근에 대한 권한을 부여)
// >> public, private, protected, default
class Car{
// 속성(필드)
int maxSpeed;
doubl
}
더보기
더보기
class Car {
// 클래스의 속성(필드)
String model; // 모델
int year; // 제조 연도
// 클래스의 행동(메서드)
// : 클래스 내부에서 정의된 함수, 객체의 행동을 표현
// >> 클래스의 데이터(필드)를 사용하여 특정 작업을 수행하거나
// , 해당 값을 변경 가능, 값을 반환
// void: 해당 메서드의 반환하는 결과가 X
// >> 반환(return)이 존재하지 않을 경우 메서드명 앞에 반드시 작성
void display() {
System.out.println("Model: " + model + ",Year: " + year);
}
// 클래스의 생성자
// : 클래스의 이름과 동일한 메서드
// >> 객체가 생성될 때 자동으로 호출
// >> 클래스 내부의 필드를 초기화할 때 주로 사용
Car(String model, int year){
// this 키워드
// >> 클래스의 필드와 생성자로 받아오는 데이터의 이름이 같을 경우 구분을 위해 사용
this.model = model;
this.year = year;
}
}
객체 생성 (객체 인스턴스화)
- new 연산자를 사용
- 클래스의 생성자를 호출 → 객체의 초기 상태를 설정
- 클래스명의 클래스의 새로운 객체를 생성
- 해당 객체에 대한 참조(주소)를 클래스 타입의 변수에 저장
객체 사용
더보기
더보기
// 1. 필드 접근(.연산자 사용)
System.out.println(myCar.model); // volvo xc60
System.out.println(myCar.year); // 2024
// 2. 메서드 호출(.연산자 사용)
myCar.display(); // Model: volvo xc60, Year: 2024
객체 생성 구문
- 클래스명 객체명 = new 클래스명(생성자 매개변수)
(예제 코드)
더보기
더보기
package chapter04;
// 클래스 생성 (Book, Person, ...)
// : 속성 2개
// : 메서드 1개
class Person {
String name;
int age;
void display(){
System.out.println("name: " + name + ", age: " + age);
}
Person(String name, int age){
this.name = name;
this.age = age;
}
}
class Book {
// 클래스 내부의 데이터(속성)
String title; // 책 제목
String publisher; // 출판사
int pageNumber; // 책 페이지 수
// 클래스 내보의 동작(메서드)
void displayInfo() {
System.out.println(title + publisher);
}
// === 생성자 함수 ===
// : new 연산자 사용 시 호출 될 메서드
// >> 생략 시 속성에 기본값이
// 일반 타입: int(0), boolean(false), char("");
// 참조 타입: null
// >> 생략 시 클래스명과 동일하면서 매개변수가 없는 메서드
Book(String title, String publisher, int pageNumber) { // 매개변수로 받은 데이터로 속성 초기화
this.title = title;
this.publisher = publisher;
this.pageNumber = pageNumber;
}
}
public class Object04 {
public static void main(String[] args) {
// 위에서 정의한 클래스를 사용하여 객체 인스턴스화
Person person = new Person("홍동현", 25);
Book myBook = new Book("백설공주", "코리아it아카데미", 50);
Book anotherBook = new Book("신데렐라", "에이원플라자", 100);
// 속성 출력
System.out.println(person.name);
System.out.println(person.age);
System.out.println(myBook.pageNumber);
System.out.println(myBook.publisher);
System.out.println(myBook.title);
System.out.println(anotherBook.pageNumber);
System.out.println(anotherBook.publisher);
System.out.println(anotherBook.title);
// 메서드 호출
person.display();
myBook.displayInfo(); // 백설공주코리아it아카데미
anotherBook.displayInfo(); // 신데렐라에이원플라자
myBook.pageNumber = 1234;
System.out.println(myBook.pageNumber); // 1234
}
}
객체 지향 프로그램의 변수
1. 필드
- 객체의 지속적인 상태를 저장하는 클래스 내부의 변수
2. 지역 변수
- 메서드가 실행되는 동안에만 존재하는 일시적인 변수
3. 인스턴스 변수
- 클래스의 각 객체(인스턴스)에 속한 변수
- 클래스 내부에서 선언, 객체가 생성될 때 메모리에 할당
4. 클래스(정적) 변수
- static 키워드를 사용하여 선언되는 변수
- 클래스의 모든 인스턴스에서 공유되는 데이터
- 프로그램이 시작될 때 생성, 프로그램이 종료될 때 소멸 (메모리 할당)
더보기
더보기
class CarClass{
// 인스턴스 변수
// : 각 객체(인스턴스) 마다 다른 값을 가짐
String color;
int speed;
String brand;
// 정적 변수
// : 해당 클래스로 생성되는 모든 객체가 동일한 값을 가짐
// : 데이터타입 앞에 static 키워드 사용
// 변수 선언과 동시에 공유될 값을 초기화
static int tireNumber = 4;
static int doorNumber = 4;
void accelerate(int increment) {
// increment: 지역 변수
// >> 메서드 내부에서만 유효
speed += increment; // speed = speed + increment;
}
}
public class Object05 {
public static void main(String[] args) {
// CarClass 인스턴스화
CarClass car1 = new CarClass();
CarClass car2 = new CarClass();
// 객체의 인스턴스 변수
car1.brand = "kia";
car1.color = "black";
// 객체의 클래스 변수: 클래스명.속성 (각 인스턴스로도 호출 가능)
System.out.println(CarClass.tireNumber); // 4
// >> 클래스 변수는 클래스명으로 접근을 권장!
// System.out.println(car1.tireNumber); // 4
// car1.tireNumber = 5;
// System.out.println(car2.tireNumber); // 5
System.out.println(car2.brand); // null
}
}
클래스 변수 VS 인스턴스 변수
형태 : 필드(속성, 멤버 변수) 중에 static이 붙은 것은 클래스 변수, 붙지 않은 것은 인스턴스 변수
선언 위치 : 클래스 영역 내에서 선언
생성 시기 & 사용 시기 & 호출 방법
1. 클래스 변수
- 클래스가 메모리에 올라갈 때
- 객체 생성 이전에도 사용 가능
- 클래스명.변수명
2. 인스턴스 변수
- 인스턴스가 생성되었을 때
- 객체 생성 이후에만 사용 가능
- 객체명.변수명
더보기
더보기
class Example{
int instaceValue;
static int classValue;
}
class Counter{
// 클래스 변수
static int count = 0;
Counter() {
count++;
}
}
public class Object06 {
public static void main(String[] args) {
Counter c1 = new Counter();
Counter c2 = new Counter();
Counter c3 = new Counter();
Counter c4 = new Counter();
Counter c5 = new Counter();
System.out.println(c3.count); // 5
new Counter();
new Counter();
new Counter();
new Counter();
System.out.println(Counter.count); // 9
}
}
'Java' 카테고리의 다른 글
[Java] Inheritance (0) | 2024.09.09 |
---|---|
[Java] Constructor (0) | 2024.09.06 |
[Java] Overloading (0) | 2024.09.06 |
[Java] Method (0) | 2024.09.06 |
[Java] Array(배열) (0) | 2024.09.05 |