JAVA Programming

Growing_HJ·2024년 5월 28일

일기장

목록 보기
6/51

2024.05.22. WED <D + 2> , 객체지향

  • 객체지향의 공부 방법
    Q. 캡슐화, 상속, 추상화, 다형성이란?
    Q. 논리적인 개념을 코드로 어떻게 표현하는지 => 문법
    Q. 위의 4대 특성이 어떤 경우에 활용되는가?
    Q. 클래스의 설계시 유지보수성을 고려하려면 어떻게 해야 하는지?
  • 객체지향의 장점
  1. 코드의 재사용성이 높다. -> 기존 코드를 활용.
  2. 코드의 관리가 용이하다. -> 쉽게 코드를 변경.
  3. 신뢰성이 높은 프로그래밍을 가능하게 한다.
    => 재사용성이 높고, 변경이 용이하여 코드의 불일치가 줄어든다.
    A. Class(클래스) & Object(객체)
    A-1. Class(클래스) - 객체를 정의해놓은 것. 객체 생성시 사용.
  • 변수 -> 배열 -> 구조체 (C언어, 여러가지 기본형 타입을 하나로 묶음)
    ex) stuGrage = (학생정보, 교과목 정보, 평가정보)
    -> 학생 성적을 관리할 수 있는 새로운 자료형
    + 단점) 정봔 관리되고 있어, 기능이 없음
    + 학생의 주소를 쉽게 변경하기 위한 기능이 없음
    -> 클래스 = 정보(학생정보, 교과목 정보, 평가정보) + 기능(주소 변경)
    정보 => 속성, 필드, 멤버변수 / 기능: 메소드, 함수
    + String 클래스
    -> 정보 (Char 배열), 대문자 바꾸기, 잘라내기, 치환하기 기능이 존재
    A-2. Object(객체) - 실제로 존재하는 것. 사물 또는 개념.
  • 객체의 용도: 객체가 가지고 있는 기능과 속성(정보)에 따라 다름.
    + 객체를 사용한다는 것은 객체가 가지고 있는 속성과 기능을 사용한다는 의미.
  • 유형의 객체: 컴퓨터, 강의실, 학생 등 (눈에 보이는 것)
  • 무형의 객체: 논리적인 것. (눈에 보이지 않는 것)

B. Object(객체) & Instance(인스턴스)
=> 클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화(메모리에 적재(로딩)행위) 라고 함.
=> 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 함.
=> 인스턴스화는 객체 --> "인스턴스 = 객체"가 성립됨.
B-1. 객체의 구성요소
b-1. 속성 (property) : 멤버변수, 필드, 상태, 특성
b-2. 기능 (function) : 메소드, 함수, 행위

  • 인스턴스는 참조변수를 통해서만 접근이 가능.
  • 참조변수의 타입은 인스턴스의 타입과 일치해야 함.
    C. 객체배열
  • 객체배열에 저장되는 값은 instance의 주소값.
    D. 변수와 메소드
    D-1. 변수의 종류 (구분기준: 선언된 위치에 따름)
  • 클래스 변수 - 모든 인스턴스에서 공유할 수 있는 변수,
    인스턴스화를 거치지 않아도 사용 가능.
  • 인스턴스 변수: 인스턴스마다 고유한 상태를 유지해야 하는 변수.
    객체가 생성이 되어야만 사용 가능.
  • 지역 변수: 해당 block(블럭, 구역)에서만 사용 가능하고, 그 범위를 벗어날 경우, 사용할 수 없게 되는 변수 => (메소드 내에서만 선언된 변수, 매개변수.)
    D-2. Method (메소드)
    => 특정 작업을 수행하는 일련의 문장들의 묶음.
    메소드의 사용이유: 높은 재사용성, 중복된 코드의 감소, 프로그램의 구조화,
    리팩토링시 메소드를 자주 활용하게 됨.
  • 메소드의 구조: 선언부 (메소드의 머리) , 구현부 (메소드의 몸통)
  • 반환타입의 메소드
  • 반환이 없을 경우: void 사용
  • 반환이 있을 경우: 반환형에 맞추어서 반환타입을 사용. 마지막에 return 필수.
    반환타입과 return 타입이 동일해야 함.
    E. 매개변수
    E-1. 기본형 매개변수: 변수의 값을 읽기만 할 수 있음
  • 원본 수정이 불가능. (read only)
    E-2. 참조형 매개변수: 변수의 값을 수정만 할 수 있음
  • 원본 수정이 가능. (read & write)
  • ex, 기본형 매개변수, 참조형 매개변수 예제코드
public class variable {
    // Data 클래스
    static class Data {
        int x;
    }

    // 기본형 매개변수의 메소드 (오버로딩 메소드)
    static void change(int x) {
        x = 1000;
        System.out.println("기본형 매개변수 메소드: x = " + x);
    }

    // 참조형 반환타입의 메소드
    static Data copy(final Data d) {
        Data tmp = new Data();
        tmp.x = d.x; // 인스턴스 변수의 값을 복사.
        return tmp;
    }

    // 참조형 매개변수의 메소드 (오버로딩 메소드, 주소값이 반환됨)
    static void change(Data d) {
        d.x = 1000;
        System.out.println("참조형 매개변수의 메소드: d.x = " + d.x);
    }

    // 가변 인자를 사용하는 문자열 연결 메소드
    static String concatenate(String delim, String... strings) {
        String result = "";
        for (String s : strings) {
            result += s + delim;
        }
        // 마지막 구분자 제거
        if (result.length() > 0) {
            result = result.substring(0, result.length() - delim.length());
        }
        return result;
    }

    public static void main(String[] args) {
        // 기본형 매개변수와 참조형 매개변수
        Data d = new Data();
        d.x = 10;
        System.out.println("d.x = " + d.x);

        // 기본형 매개변수
        change(d.x); // d.x가 전달되는 것이 아니고 d.x의 값인 10이 전달됨.
        System.out.println("d.x = " + d.x);

        // 참조형 매개변수
        change(d);
        System.out.println("d.x = " + d.x);

        Data d2 = copy(d);
        System.out.println("d2.x = " + d2.x);

        // concatenate 메소드 테스트
        String result = concatenate(", ", "apple", "banana", "cherry");
        System.out.println("Concatenated string: " + result);
    }
}
  

0개의 댓글