1. 절차지향 프로그래밍
절차지향 프로그래밍이란 절차를 지향하는 즉, 순차적으로 프로그램이 동작하게 하는 프로그래밍 기법이다.
대표적인 언어로 C언어가 있다.
장점
1. 컴퓨터의 처리과정과 유사해 객체지향 언어에 비해 실행과정이 빠르다.
단점
1. 유지보수가 어렵다.
2. 실행 순서가 정해져 있으므로 순서가 바뀔 경우 프로그램이 정상작동 하지 않을 수 있다.
3. 프로그램을 분석하는것이 어렵다.
4. 대형 프로젝트에 부적합하다.
2. 객체지향 프로그래밍
객체지향 프로그래밍은 프로그래밍에서 필요한 데이터를 추상화시켜 상태(멤버변수)와 행위(메서드)를 가진 객체를 만들고 그 객체들 간의 상호작용을 통해 로직을 구성하는 프로그래밍 기법이다.
대표적인 언어로 JAVA가 있다.
클래스와 객체는 무엇인가요?
객체지향 프로그래밍은 필요한 데이터를 추상화 시켜 클래스를 설계하는 프로그래밍 기법이다.
여기서 말하는 추상화란 추상클래스를 만들고, 추상 메서드를 만드는 의미가 아닌 클래스를 설계하는 과정 자체를 의미한다.
클래스 : 추상화를 거쳐 집단에 속해있는 '상태'와 '행위'를 '멤버변수(인스턴스 변수)' 와 '메소드'로 정의한것, 즉 객체를 만들기 위한 메타데이터라고 볼 수 있다.
객체(인스턴스) : 클래스에서 정의된 것을 바탕으로 실제 메모리에 할당한 것으로 실제 프로그래밍에서 사용되는 데이터를 말한다. 우리가 java에서 new 예약어를 사용하여 인스턴스를 생성하는것이다.
객체 지향의 3가지 특징
- 캡슐화 (Encapsulation)
캡슐화는 외부의 잘못된 접근으로 값이 변하는것을 막기 위해 클래스 내의 변수나 메소드를 감추거나 드러내는 은닉성을 가지고 있으며, 이는 JAVA에서 접근제어자로 실현이 가능하다.
이러한 접근 제어는 무작위로 지정하는 것이 아니라 연관된 목적을 가진 변수와 메소드 별로 작업을 해야한다.
접근 제어자의 종류 public 어떠한 클래스에서도 접근 가능 protected 동일 패키지 내의 클래스와, 해당 클래스를 상속받은 클래스 에서 접근 가능 default 동일 패키지 내의 클래스에서 접근 가능 private 해당 클래스에서만 접근 가능 - 상속 (Inheritance)
JAVA에서 상속은 우리가 알고있는 상속의 개념과 크게 다르지 않다. 자식 클래스에서 부모 클래스로 부터 자원을 물려받는 것을 의미하며, 예약어 extends를 통해서 실현 가능하다.
이러한 상속을 사용하게 될 경우 개발자들은 코드의 중복성을 최소화 할 수 있다. 각각의 자식 클래스에 부모 클래스의 자원을 적어주지 않아도 되기 때문이다.
또한 부모클래스만 수정하여도 자식클래스 전체가 수정이 가능하므로 유지보수의 편리성도 얻을 수 있다. - 다형성 (Polymorphism)
다형성은 하나의 객체가 여러가지 타입을 가질 수 있다는 것을 의미하며, 부모 타입의 참조변수로 자식 타입의 인스턴스를 생성할 수 있다.
즉, 부모 클래스에 존재하는 메소드를 자식 클래스에서 오버라이딩(Overriding)하여 상황에 따라 변수명이나 메소드 명이 다른 의미로 해석될 수 있는것이다.
장점
1. 코드의 재활용성이 높아진다.
2. 유지보수가 쉽다.
3. 위 2가지의 이유로 대형프로젝트에 적합하다.
단점
1. 처리 속도가 상대적으로 절차적 프로그래밍 언어보다 느리다.
2. 객체가 많으면 용량이 커질 수 있다.
3. 설계할 때 많은 시간과 노력이 발생한다.
다음으로, CLEAN CODE 로 유명한 로버트 마틴이 제시한 객체지향의 SOLID 원칙으로 다음 포스팅을 이어가겠다.
'JAVA' 카테고리의 다른 글
Java 에는 Call by reference 가 없다. (0) | 2022.01.24 |
---|---|
JVM의 구조와 자바의 메모리 구조 (0) | 2022.01.24 |
객체지향의 5대 원칙 SOLID (1) | 2022.01.17 |
Socket 을 활용한 네트워크 프로그래밍 (0) | 2022.01.03 |
자바 NIO (0) | 2021.12.30 |
직렬화(Serialization) (0) | 2021.12.29 |