Day 06 :) 객체지향프로그래밍과 클래스

Nux·2021년 9월 6일
0

자바웹개발

목록 보기
6/105
post-thumbnail

객체지향

객체지향프로그래밍

  • 객체(부품)을 만들고 이 객체들을 조립해서 소프트웨어를 만드는 개발방식
  • 객체를 만들기 위해선 클래스(설계도)가 필요함

객체지향프로그래밍의 장점

  • 코드의 재사용성 높음: 기존의 코드를 이용하여 새코드 작성 가능(상속)
  • 코드 관리 용이: 유지보수가 쉬우며 코드의 수정/추가/확장이 간편함(조립, 디자인패턴)
  • 신뢰성 높음
    • 접근제한자와 메소드를 이용해서 데이터값을 감출 수 있음(캡슐화, 은닉화)
    • 코드의 중복 제거 및 코드 불일치로 인한 오작동 방치(리팩토링)

객체지향프로그래밍의 특징

  • 캡슐화
    • 객체의 구현내용을 감추는 것
    • 객체의 내부구조를 알 수 없고 공개된 속성과 기능만 이용 가능
    • 잘못된 사용으로 인한 객체 손상 방지
  • 상속
    • 새로운 객체를 만들때 기존 객체를 이용하는 것
    • 상위(부모)클래스, 하위(자식)클래스로 이루어짐
    • 상위클래스를 재사용하기때문에 하위클래스 빠르게 개발 가능
  • 추상화(다형성)
    - 같은 종류의 객체여도 실행결과가 다양하게 나옴
    • 사용방법은 동일하지만 사용하는 객체가 바뀌면 실행결과가 달라짐
      ex) 컴퓨터의 출력기능. 프린터기에 따라 흑백/컬러 등 결과가 다름
      스마트폰에서 소리가 이어폰에서 나오는지, 스피커에서 나오는지에 따라 결과가 다름

객체지향프로그래밍 개발 단계

  1. 클래스를 설계함
  2. 클래스로 객체를 생성함
  3. 생성된 객체의 속성과 기능을 활용함

객체

객체의 정의

  • 물리적으로 존재하거나 추상적으로 생각 할 수 있으며, 다른것과 식별이 가능함.
    ex) 물리적: 자동차, 책 등
    추상적: 주문, 계좌개설 등
  • 프로그래밍에서는 프로그래밍 할 대상을 뜻함
  • 객체는 각각 고유한 속성과 기능을 갖고 있음
    ex1) 자동차
    ★속성: 제조사, 모델명, 가격 등
    ☆기능: 출발, 정지, 운전 등
    ex2) 주문하기
    ★속성: 주문번호, 고객명, 주문상태 등
    ☆기능: 조회, 취소, 반품 등
  • 프로그래밍에서는 ★속성=필드 / ☆기능=메서드로 정의함
  • 인스턴스화: 메모리 안에 객체를 할당하는 action
  • 인스턴스: 메모리 안에 할당된 객체

객체간 관계

  • 집합관계(포함관계): 객체가 다른 객체의 부품으로 사용됨
  • 사용관계(의존관계): 객체가 다른 객체의 메소드를 호출해서 원하는 작업 수행
  • 상속관계
    • 부모객체로 자식객체 생성
    • 상위 객체는 종류(자동차, 스마트폰)이며, 하위객체는 구체적 모델(제네시스, Galaxy20)

객체의 생성

  • new연산자를 이용하여 클래스에 객체를 생성함.
  • new연산자는 객체 생성 후 객체의 주소값을 반환하므로, 이를 저장하기 위한 참조 변수가 필요함
클래스명 참조변수;
참조변수 = new 클래스명();	// 이때 new연산자가 주소값을 알아서 생성해서 넣어줌
1.
Car a;
a = new Car();

2.
Car a = new Car();
  • 객체는 메모리의 힙(heap)영역에 만들어짐
  • 예외적으로 문자열을 표현하는 String은 자주 사용하는 객체이므로 명령어가 더 간단함
1. 원본
String a = new String("홍길동");
2. 간단한 버전
String a = "홍길동"

참조형변수

  • 참조형변수는 기본형변수처럼 값이 아닌, 생성된 객체의 주소값을 저장한느 변수
  • 참조형변수의 타입은 해당 객체 생성 시 사용한 클래스 이름으로 대체된다
Car myCar = new Car();
Car yourCar;
yourCar = new Car();

  • 생성한 객체의 속성과 기능을 사용하기 위해서는 반드시 참조변수를 이용해야함.
  • 참조형 변수로 객체 이용하기
    1. 설계도 작성
    2. 설계도로 객체 작성 후 주소값을 참조변수에 담음
    3. 참조변수를 이용하여 객체에 접근

생성된 객체의 속성과 기능 이용

  • 참조변수가 참조하지 않는 변수는 객체로 이용 불가
  • 생성된 객체의 속성과 기능을 사용하기 위해서는 반드시 참조변수에 객체의 주소값을 저장해야함
Book mybook = new Book();	// 객체 생성
mybook.title = "나미야 잡화점의 기적";	// 객체 속성에 값 저장
mybook.writer = "히가시노게이고";		 // 객체 속성에 값 저장
System.out.println(mybook.title);	 // 객체 속성에 저장된 값 출력 
System.out.println(mybook.writer);   // 객체 속성에 저장된 값 출력 

클래스

클래스의 정의

  • 클래스는 객체의 설계도가 됨
  • 객체를 생성하기 위한 필드(속성)과 메서드(기능)로 구성
  • 클래스에서 만들어진 객체를 인스턴스라고 함.
    즉, 인스턴스는 객체이다.

클래스의 설계

Public class 클래스이름{};
Public class Car{}
  • 클래스의 이름은 대문자로 시작함(관례적)

클래스의 구성

  • 하나의 클래스로 여러개의 객체 생성 가능
  • 필드, 생성자, 메서드로 구성
    1. 필드: 속성을 나타냄. 객체 데이터를 저장
    2. 생성자: 객체 생성시 초기화 역할을 해줌
    1. 메서드: 객체의 기능에 해당하는 수행문의 코드블록

필드

  • 객체의 고유 데이터, 상태, 다른 객체를 저장하는 곳
  • 초기화값을 지정하지 않으면 데이터타입의 기본값으로 초기화됨
  • 객체가 소멸하지 않는 한 함께 유지됨
  • 필드 생성 후 값 없이 필드를 찍으면 16진수로 이루어진 객체의 일련번호가 출력됨

객체배열

  • 여기서 향상된 for문을 응용해서 쓸 수 있음
    참고로 for문에 들어갈 초기식의 타입은 배열과 같아야함
System.out.println(scores[0].name);
System.out.println(scores[1].name);
System.out.println(scores[2].name);	// 이 출력값을 아래와 같이 향상된 for문을 이용하여 간결하게 작성 가능

Score scores = new score();
for(int score1 : scores){		// for(데이터타입 변수명 : 배열)
	System.out.println(score1.name);
}

선언위치에 따른 변수의 종류

class Car{
	int year;		// 인스턴스변수
    static int milage;		// 클래스변수	★인스턴스변수+클래스변수 = 멤버변수★
    void method(){
    	int a = 30;		// 지역변수
    }
}
  • 인스턴스 변수: 클래스 영역에서 선언되며 인스턴스 생성시 만들어짐. 서로 다른 값을 가질 수 있음.
  • 클래스 변수: 인스턴스 변수 앞에 static을 붙인 형태이며 모든 인스턴스가 같은 값을 공유함.
  • 지역 변수: 메서드 내에서만 사용 가능하며 메서드가 종료되면 소멸됨. 즉, 블럭을 벗어나면 소멸.

0개의 댓글