기존의 프로그래밍 방식에서 몇 가지 새로운 규칙을 추가하여 발전된 형식.
절차적 언어에 익숙한 프로그래밍 습관을 객체지향적으로 바꾸도록 노력해야 할 것이다.
<✍️ 주요특징>
- 코드이 재사용성이 높다.
새로운 코드를 작성할 때, 기존의 코드를 이용하여 쉽게 작성할 수 있다.- 코드의 관리가 용이하다.
코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.- 신뢰성이 높은 프로그래밍을 가능하게 한다.
제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 이한 오동작을 방지할 수 있다.
"코드의 재사용성이 높고 유지보수가 용이하다"
<✍️ OOPs를 학습하는 관점>
- 재사용성
- 유지보수
- 중복된 코드의 제거
의 관점에서 보자!!
- 클래스
정의: 객체를 정의해 놓은 것
용도: 객체를 생성하는데 사용
- 객체
클래스로 실제로 메모리에 생성된 것
- 객체의 구성 = 속성(proerties) + 매서드(methods)
ex)
class TV
{
//properties part
String color;
boolean power;
int channel;
//methods part
void power() {power != power}
void channelUp() {channel++;}
void channelDown() {channel--;}
}
정리:
class로 각각의 필요한 객체들을 생성하고(instance화),
그 객체들의 구성요소(properties, methods)를 활용해서 프로그래밍한다.
- 인스턴스화 : class로 부터 객체를 만드는 과정
"책상은 인스턴스다" (X)
"책상은 객체이다."(O)
"책상은 책상 클래스의 객체이다" (X)
"책상은 책상 클래스의 인스턴스이다." (O)
- 하나의 .java에 하나의 class를 쓰는 것이 일반적이다.
- 여러 class를 정의할 시, public class를 파일이름으로,
public class가 없다면 아무 class이름으로 하면 된다.- 대소문자 구분 필수
class Ex6_1 {
public static void main(String args[]) {
Tv t;
t = new Tv();
t.channel = 7;
t.channelDown();
System.out.println("Current channel" + t.channel);
}
}
class Tv {
String color;
boolean power;
int channel;
void power() { power = !power; }
void channelUp() { ++channel; }
void channelDown() { --channel; }
}
- 정리
"인스턴스는 참조변수를 통해서만 다룰 수 있으며,
참조변수의 타입은 인스턴스의 타입과 일치해야 한다."
TV t1 = new TV(); //한 줄로 생성가능
TV[] tvArr = new TV[100];
//참조변수 배열(객체배열)을 생성
//이게 빡침 형태는 instance생성이랑 똑같으면서 한번 더 객체를 생성해야됨.
for(int i=0;i<100;i++){
tvArr[i] = new tv();
}
- 변수
- 배열
- 구조체(관련된 변수 여러개)
- 클래스(구조체 + 함수 집합)
C언어 | JAVA |
---|---|
문자열을 char의 배열로 다룸 | String 객체로 다룸 |
데이터와 함수 간의 밀접한 관계를 다루기 힘듬 | 객체로 선언함으로서 이미 문자열을 다룰 수 있는 매서드들의 중요성과 클래스의 편의성을 알 수 있음 |
잘 봤습니다. 좋은 글 감사합니다.