728x90
갱신중!
JAVA의 장단점
장점
- 운영체제에 독립적이다
- JVM에서 동작하기 때문에 특정 운영체제에 종속되지 않는다.
- 객체지향 언어이다
- OOP를 위한 여러 언어적 지원을 하고있다. (캡슐화, 상속,추상화, 다형성 등등)
- 자동으로 메모리 관리를 해준다.(Gargage Collector)
- JVM에서 Garbage Collector라고 불리는 데몬 쓰레드에 의해 GC(Garbage Cllection)가 일어난다
- GC로 인해 별도의 메모리 관리가 필요 없으며 비지니스 로직에 집중할 수 있다.
오픈소스이다
정확히는 OpenJDK가 오픈소스이다. OracleJDK는 사용 목적에 따라서 유료가 될 수 있다.
참고 : 구글과 Oracle의 자바전쟁
많은 JAVA 개발자가 존재하며 생태계가 잘 구축되어있다.
오픈소스 라이브러리가 풍부하며 잘 활용한다면 짧은 개발 시간 내에 안정적인 앱구현이 가능하다
멀티쓰레드를 쉽게 구현할 수 있다.
- 자바는 쓰레드 생성 및 제어와 관련된 라이브러리 API를 제공하고 있기 때문에 실행되는 운영체제에 상관없이 멀티 쓰레드를 쉽게 구현할 수 있다
동적 로딩(Dynamic Loading)을 지원한다
- 앱이 실행될 때 모든 객체가 생성되지 않고, 각 객체가 필요한 시점에 클래스를 동적 로딩해서 생성한다.
- 유지보수 시 해당 클래스만 수정하면 되기 때문에 전체 앱을 다시 컴파일 할 필요가 없다
- 따라서 유지보수가 쉽고 빠르다.
단점
비교적 속도가 느리다
- 자바는 한 번의 컴파일링으로 실행 가능한 기계어가 만들어지지 않고 JVM에 의해 기계어로 번역되고 실행하는 과정을 거치기 때문에 C나 C++의 컴파일 단계에서 만들어지는 완전한 기계어보다는 속도가 느리다. 그러나 하드웨어의 성능 향상과 바이트 코드를 기계어로 변환해주는 JIT컴파일러 같은 기술 적용으로 JVM의 기능이 향상되어 속도의 격차가 많이 줄어들었다.
예외처리가 불편하다.
- 프로그래머 검사가 필요한 예외가 등장한다면 무조건 프로그래머가 선언을 해줘야 한다.
JAVA의 접근 제어자의 종류와 특징
접근제어자 | 표시 | 설명 |
---|---|---|
public | + | 어떤 클래스의 객체에서든 접근 가능 |
private | - | 이 클래스에서 생성된 객체들만 접근 가능 |
protected | # | 이 클래스와 동일 패키지에 있거나 상속 관계에 있는 하위 클래스의 객체들만 접근 가능 |
package | ~ | 동일 패키지에 있는 클래스의 객체들만 접근 가능 |
OOP의 4가지 특징
추상화
- 구체적인 사물들의 공통적인 특징을 파악해서 이를 하나의 개념(집합)으로 다루는 것
캡슐화
- 정보 은닉(information hiding): 필요가 없는 정보는 외부에서 접근하지 못하도록 제한하는 것
- 변수와 메소드를 하나로 묶어냄
- 데이터를 외부에서 직접 접근하지 않고 합수를 통해서만 접근한다
- public, private, protected ...
상속
- 자식 클래스가 부모 클래스의 특성과 기능을 물려받는 것
- 기능의 일부분을 변경하는 경우 자식 클래스에서 상속받아 수정 및 사용함
- 상속은 캡슐화를 유지, 클래스의 재사용을 용이하도록 해 준다
다형성
서로 다른 클래스의 객체가 같은 메시지를 받았을 때 각자의 방식으로 동작하는 능력
오버로딩(Oberloading) : 하나의 클래스에서 메소드의 이름은 같지만, 파라메터가 다른것
오버라이딩(Overriding) : 부모 클래스의 메소드를 자식 클래스의 용도에 맞게 재정의 하여 코드의 재 사용성을 높이는것
OOP의 5대 원칙(S.O.L.I.D)
S : 단일 책임 원칙(SRP, Single Responsibility Principle)
- 객체는 단 하나의 책임만 가져야 한다
O : 개방-폐쇄 원칙(OCP, Open Closed Principle)
- 확장에는 열려(Open) 있으나. 변경에는 닫혀(Closed)있어야 한다.
L : 리스코프 치환 원칙(LSP, LiskovSubstitution Principle)
- 프로그램의 객체는 프로그램의 정확성을 꺠뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
I : 인터페이스 분리 원칙(ISP, Interface Segregation Principle)
- 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
D : 의존 연전 원칙(DIP, Dependency Inversion Principle
- 의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것 보다는 변화하기 어려운 것, 거의 변화가 없는 것에 의존하라.
- 추상화에 의존하라.
reference
https://gmlwjd9405.github.io/2017/10/01/basic-concepts-of-development-java.html
https://velog.io/@ygh7687/OOP%EC%9D%98-5%EC%9B%90%EC%B9%99%EA%B3%BC-4%EA%B0%80%EC%A7%80-%ED%8A%B9%EC%84%B1
728x90
'Study > 면접 준비' 카테고리의 다른 글
내가 보려고 정리하는 신입 개발자 면접 질문 및 답변 - JAVA#2 (0) | 2021.05.12 |
---|---|
내가 보려고 정리하는 신입 개발자 면접 질문 및 답변 - JAVA#1 (0) | 2021.05.08 |