JAVA(객체지향)는 class 기반으로 이루어진다.
class 안에는 속성, 기능(메소드)이 있다.
자바의 특징
- 🚩객체지향(OOP, Object Oriented Programming language)
상속, 캡슐화(은닉), 다형성, 추상화가 적용된 객체지향 언어.
위 4가지 특징을 활용해 코드의 재사용성을 증가하고, 유지보수를 용이하게 만들 수 있다.
OOP : 객체들을 하나씩 조립해서 완성된 프로그램을 만드는 기법
1) 상속 (Inheritance) : 부모 클래스의 변수와 메서드를 자식 클래스가 전부 물려받는 것.
2) 캡슐화 (Encapsulation, Information Hiding) : 객체의 변수 및 메서드를 외부 객체가 함부로 건드리지 못하게 감쌈. 클래스의 getter / setter 등을 통해 은닉.
3) 다형성 (Polymorphism)
- 하나의 객체가 여러가지 타입을 가질 수 있는 것.
- 오버로딩, 오버라이딩, 업스캐팅, 다운캐스팅 등이 있음.
*즉, 사용 방법은 동일하지만 실행 결과가 다양하게 나오는 성질
4) 추상화 (Abstraction)
- 자바에서 공통 속성, 기능을 묶어 이름을 붙이는 것.
- 추상클래스, 인터페이스를 통해 구현.
- 추상클래스(Abstract Class) : 추상메서드를 하나 이상 포함한 추상 클래스
- 인터페이스 (Interface) : 추상메서드만을 포함한 추상 클래스, 다중 상속 가능
객체지향 프로그래밍의 장 ㆍ단점
장점
- 코드 재사용 용이 : 상속을 통해 코드의 재사용을 높일 수 있다.
- 유지보수의 우수성 : 캡슐화를 통해 유지보수가 쉽다.
- 대형 프로젝트 적합 : 클래스 단위로 모듈화 개발로 업무 분담
단점
- 개발속도 느림 : 객체가 처리하려는 것에 대한 정확한 이해가 필요하다.
- 실행속도 느림 : 객체지향 언어가 대체적으로 실행속도가 느리다.
- 코딩의 난이도 높음 : 다중 상속과 같은 이유로 복잡도 상승한다
OOP의 5가지 원칙 (SOLIP)
- 단일 책임 원칙(SRP : Single Responsibilty Principle) -하나의 객체는 반드시 하나의 동작만의 책임을 갖는다.
- 개방 폐쇄 원칙(OCP : Open/Closed Principle) - 객체의 확장은 개방적으로, 객체의 수정은 폐쇄적으로 대한다.
- 리스코프 치환 원칙(LSP : Liskov's Substitution Principle) - 부모 객체와 상속한 자식 객체가 있을 때, 부모 객체를 호출하는 동작에서 자식 객체가 부모 객체를 완전히 대체할 수 있다.
- 인터페이스 분리 원칙(ISP : Interface Segregation Principle) - 객체는 자신이 호출하지 않는 메소드에 의존하지 않아야한다.
- 의존관계 역전 원칙(DIP : Dependency Inversion Principle) - 객체는 저수준 모듈보다 고수준 모듈에 의존해야한다.
- 🚩운영체제에 독립적으로 동작
자바가상머신(JVM)을 통해 JVM이 설치되 있는 OS에서 모두 자바로 작성된 프로그램이 실행 가능.
- 🚩가비지컬렉터 (GC, Garbage Collecor)를 통한 자동 메모리 관리
가비지컬렉터가 자동으로 메모리를 관리하여 참조되고 있지 않은 메모리를 해제.
- 🚩분산처리의 지원
자바 언어는 대규모 분산처리 환경 등의 프로그래밍에 적합.
- 🚩멀티쓰레드의 지원
자바의 멀티쓰레드는 시스템과 관계없이 구현 가능하며, Java API를 통해 쉽게 구현 가능.
멀티쓰레드란 ? 여러 스레드를 동시에 실행시키는 응용프로그램을 작성하는 기법
*스레드 : 프로세스 내의 다른 독립적 제어 플로우와 동일한 주소 공간 내에서 작동하는 독립적 제어 플로우
장점 : 프로세스 내 메모리 공유를 통한 시스템 자원의 소모가 줄어듬.
단점 : 자원을 공유하기 때문에 충돌 발생 가능 있음.
멀티쓰레드 구현방법
1) Thread 클래스 ( 화이트박스 방식 )
: 자바에서 스레드를 만들기 위해 Thread class 상속하여 스레드를 생성한다.
2) Runnable 인터페이스 ( 블랙박스 방식 )
: Thread class와 같이 자바에서 스레드 실행시키는 인터페이스이다. 다중 상속이 지원가능.
- 🚩동적 로딩의 지원
동적 로딩을 지원함으로써 프로그램 실행 시 모든 클래스가 로딩되지 않고 필요한 시점에 필요한 클래스만 로딩하여 사용 가능.
장점 : 클래스 일부 변경 시 다시 컴파일 안해도됨, 비교적 작은 작업으로 처리할 수 있는 유연성 제공
단점 : 프로그램 실행 속도가 정적로딩에 비해 떨어짐(이를 위해 static 키워드 사용)
정적로딩이란?
- 프로그램 실행 시 모든 실행파일이 메모리에 적재되어 실행되는 로딩 방법.
장점 : 빠르게 가져와 사용할 수 있음.
단점 : 모든 파일이 메모리에 적재되어 메모리를 많이 차지.
'✨ Java > etc' 카테고리의 다른 글
자바(JAVA) - static(클래스)변수와 instance변수, local(지역)변수 (0) | 2023.07.06 |
---|---|
자바(JAVA) - 자료형 변환 (byte, int, long, char, boolean) 연산 (0) | 2023.07.06 |
자바(JAVA) - 제네릭(Generic) (0) | 2023.07.06 |
자바(JAVA) - 상수(final)의 의미 (0) | 2023.07.05 |
자바(JAVA) - Static의 의미 (0) | 2023.07.05 |
댓글