본문 바로가기

CS 전공지식

24.02.07 Java 관련 3

1. 절차지향 프로그래밍

    - 실행하고자 하는 절차를 정하고 이 절차대로 프로그래밍하는 방법

    - 개체를 순차적으로 처리하여 프로그램 전체가 유기적으로 연결되어야 한다

  1) 장점

       - 절차지향언어의 구조는 컴퓨터의 처리구조와 유사하므로 실행 속도가 빠르다

  2) 단점

       - 모든 프로그래밍이란 순차적으로 실행되어야 하며, 한군데에서 오류가 발생시 찾기도 어렵고 서로

         유기적으로 연결되어 있기 때문에 부분 오류가 전체 수정으로 이루어질 수 있다

       - 코드의 순서가 있어야하기 때문에 융통성이 부족하여 생산성이 떨어짐

 

2. 객체지향 프로그래밍 (OOP)

    - 연관되어 있는 변수와 메서드를 하나의 그룹으로 묶어 클래스(개념)를 구현하고 이들 사이의 상호 작용을

      프로그램으로 나타낸 것

    - 프로그래밍에 필요한 데이터의 상태와 행위를 객체로 만들어 객체간의 상호작용을 통해 비지니스 로직을 구성하는것

  1) 장점

       - 객체를 이용하여(클래스) 코드 재사용이 용이하고 상속을 통한 확장이 가능

       - 클래스단위로 모듈화, 작게작게 나눌 수 있기 때문에 유지보수에도 좋고 분업에도 좋다

  2) 단점

       - 객체가 많아질수록 용량이 커질 수 있다

       - 객체를 올바르게 설계하는데 많은 노력과 시간이 필요

  3) 특징

     (1) 상속

           - 자식클래스가 부모클래스의 기능과 상태를 물려받아 그대로 사용하거나 필요한 부분만 수정할 수 있도록 하는 것

     (2) 추상화

           - 불필요한 부분을 지우고 필요한 핵심만을 정의해 두는 것

           - 사물을 추상화한 후 필요한 객체에서 상속받아 필요에 맞게 기능을 재정의하여 사용할 수 있도록함

     (3) 캡슐화

           - 비슷한 속성과 메소드들을 하나의 클래스로 모은것

           - 외부 접근으로부터 데이터를 지킴

     (4) 다형성

           - 같은 이름을 가지더라도 다른 기능을 구현할 수 있는 것

           - 오버로딩 과 오버라이딩, 인터페이스와 연관이 있다

  4) Spring 에서의 OOP

       - Spring 에서 관리하는 Bean 을 이용해 객체에 의존성을 주입하는 것이 핵심

       - 객체는 주입받은 객체를 직접관리하지 않아도 되고 어떻게 구현되어 있는지 알 필요없이 어떤 기능이

         있는지만 알면 되기 때문

  5) 객체지향 프로그래밍 설계원칙(SOLID)

     (1) 단일 책임원칙

           - 모든 클래스는 각각 하나의 책임만 가져야 한다

     (2) 개방 폐쇄 원칙

           - 확장에 열려있고 수정에는 닫혀있는 기존의 코드를 변경하지 않으면서 기능을 추가 할 수 있도록

             설계가 되어야 한다

     (3) 리스코프치환 원칙

           - 자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있다

     (4) 인터페이스 분리 원칙

           - 한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다

     (5) 의존관계 역전 원칙

           - 의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것보다는 변화하기 어려운 것,

             거의 변화가 없는 것에 의존하라는 것

 

3. 함수형 프로그래밍

    - 주어진 문제를 작은 문제로 나눈 후 이 작은 문제를 순수 함수로 만들어 순수함수를 조합하여 프로그램을

      만드는 선언형 프로그래밍 기법

    - 어떻게 하는지보다 무엇을 할 것인지를 중심으로 설명하는 프로그래밍 방식

    - 들어오는 input 에 대해 원하는 결과값이 무엇(What)이다 라고 정의한 순수 함수들을 상태를 변화시키지 않고

      함수의 응용과 조합으로 프로그래밍을 유도해 Side-Effect(예상하지 못한 원치않는 결과)를 최대한 줄여서

      신뢰성이 있는 순수함수를 만드는 것

  1) 장점

       - 사용하는 모든 데이터가 변경 불가능하고 함수는 부수효과를 가지지 않기 때문에 공유데이터에 대한

         동시성 접근 문제에 대해 빅적 자유로울 수 있다

  2) 단점

       - 모든 설계를 순수 함수 단위로 쪼개어 유기적으로 설계해야 하기 때문에 로직이 커질수록 생각해야 하는

         부분이 많아지며, 잘못된 설계는 효율의 감소로 이어짐

 

4. Call By Value

    - 기본 자료형 변수를 복사하는 경우에 발생하며 기본 자료형 변수는 저장하고 있는 값을 그 값 자체로 해석하기에

      두개의 변수는 서로에게 영향을 주지 않음

  1) 장점

       - 복사하여 처리하기 때문에 안전하고 원래의 값이 보존됨

  2) 단점

       - 복사를 하기 때문에 메모리 사용량이 늘어남

 

5. Call by reference

    - 객체를 저장하고 있는 객체 참조 변수를 복사하는 경우에 발생하며, 참조 자료형 변수는 저장하고 있는 값을

      주소로 해석하기에 두개의 변수가 같은 객체를 참조하게 됨

  1) 장점

       - 복사하지 않고 직접 참조를 하기에 빠르다

  2) 단점

       - 직접 참조를 하기에 원래 값이 영향을 받는다

 

6. Java 의 호출방식

    - 함수에 전달되는 인자의 데이터 타입에 따라서 (원시자료형 / 참조자료형) 함수 호출 방식이 달라짐

  1) 원시 자료형

       - Call By Value 로 동작 (int, short, long, float, double, char, boolean)

  2) 참조 자료형

       - Call by reference 로 동작 (Array, Class, Instance)

 

'CS 전공지식' 카테고리의 다른 글

24.02.14 웹, 네트워크 관련  (0) 2024.02.14
24.02.13 Java 관련 4  (1) 2024.02.13
24.02.07 Java 관련 2  (1) 2024.02.07
24.02.06 Java 관련 1  (1) 2024.02.06
24.02.02 Java 의 Collection Framework 란?  (1) 2024.02.02