일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- @RediretAttribute
- HTTP와 HTTPS의 차이
- WAS와 WEB서버 차이
- 의존성 주입
- 정보처리기사 해설
- 쿠키와 세션의 차이
- @RequiredArgsConstructor
- 정보처리기사
- org.mybatis.spring.MyBatisSystemException
- 공개 암호화키
- 테스트코드 작성
- 톰캣에러
- 코드로 배우는 스프링부트 웹 프로젝트
- 게시판 만들기
- 정보처리기사 1과목
- 인터페이스와 추상클래스 차이
- oracle Database 설정
- HTTP
- Tomcat version 8.5 only supports J2EE 1.2
- 스프링 게시판 만들기
- and Java EE 5
- Junit Test 에러
- 정보처리기사 20년
- pom.xml 설정
- java 면접질문
- and 7 Web modules
- 코드로 배우는 스프링 웹프로젝트
- java jdk 오류
- 쿠키와 세션의 특징
- 코드로 배우는 스프링 웹 프로젝트
- Today
- Total
모아이티
[면접질문] JAVA_ 객체지향 프로그래밍이란 무엇인가 본문
# 객체지향 프로그래밍(OOP)이란?
-> 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 토해 로직은 구성하는 프로그래밍 방법
여기서 수많은 질문들이 나올 수 있다.
1. 객체지향의 장점과 단점
2. 객체가 무엇이냐
3. 객체지향 프로그래밍의 특징
등등 그럼 도 객체를 설명하면서 클래스라던지 메서드라던지 계속해서 질문이 들어올 수 있다.
먼저 객체지향의 장단점부터 알아보자.
# 객체지향의 장단점
장점
a. 코드 재사용이 쉽다.
- 남이 만든 클래스를 가져와서 이용할 수 있고 상속을 통해 확장할 수 있다.
b. 유지보수가 쉽다.
- 절차지향은 일일이 찾아 수정해야 하지만 객체지향은 수정해야 할 부분이 클래스 내부에 멤버 변수 혹은 메서드로 존재하기 때문에 그 부분만 찾아서 수정하면 된다.
c. 대형 프로젝트에 적합하다.
- 클래스 단위로 모듈화시켜서 개발할 수 있어 여러 명, 여러 팀에서 프로젝트를 진행할 때 업무분담이 쉽다.
단점
a. 처리 속도가 상대적으로 느리다.
b. 객체가 많으면 용량이 커진다.
c. 설계시 많은 시간과 노력이 필요하다.
# 객체 지향 프로그래밍 키워드 5가지
1) 클래스 + 인스턴스(객체)
2) 추상화
3) 캡슐화
4) 상속
5) 다형성
1) 클래스와 인스턴스(객체)는 무엇인가?
클래스 : 어떤 문제를 해결하기 위한 데이터를 만들기 위해 추상화를 거쳐 집단에 속하는 속성(attribute)과 행위(behavior)를 변수와 메서드로 정의한 것으로 객체를 만들기 위한 메타정보라고 볼 수 있다.
인스턴스(객체) : 클래스에서 정의한 것을 토대로 실제 메모리에 할당된 것으로 실제 프로그램에서 사용되는 데이터
2) 객체 지향에서의 추상화
객체 지향 프로그래밍에서는 '추상화'라는 단어를 여러 군데 붙일 수 있다.
여기서 말하는 추상화는 추상 클래스나 추상 클래스가 갖는 추상 메서드를 의미하기보다는 클래스를 설계하는 것 자체를 의미한다. 즉, "공통의" 속성이나 기능을 묶어 이름을 붙이는 것이다.
3) 캡슐화
목적
- 코드를 재수정 없이 재활용하는 것
- 접근 제어자를 통한 정보 은닉
-> 절차지향 프로그래밍에서는 라이브러리를 통해서 변수와 함수를 재활용할 수 있지만, 코드의 수정이 일어나면 영향 범위를 예상하기 어렵다.
그러나 객체 지향 프로그래밍은 캡슐화를 통해 객체가 외부에 노출하지 않고, 기능을 접근제어자를 통해 적절히 제어 권한이 있는 객체에서만 접근하게 할 수 있다. 코드의 수정이 일어나면 해당 객체만 수정하면 되기에 영향 범위를 예측 가능하다.
즉 객체 지향 프로그래밍에서 기능과 특성의 모음을 "클래스"라는 "캡슐"에 분류해서 넣는 것이 캡슐화다.
객체가 맡은 역할을 수행하기 위한 하나의 목적을 한 곳에 묶는다.
4) 상속은 무엇인가?
절차 지향 프로그래밍에서도 "라이브러리"를 통해서 남이 짜 놓은 소스 코드를 가져와 사용한다.
하지만 내 의도에 맞게 수정하려면 다른 라이브러리가 되어 버전에 따라 동작하지 않을 수 있고 불필요한 코드의
수정 작업을 해야 한다.
이런 문제를 해결하기 위해 상속이 등장했다.
상속은 부모 클래스의 속성(필드)과 기능(메서드)을 그대로 이어받아 사용할 수 있게 하고 기능의 일부분을 변경해야 할 경우 상속받은 자식 클래스에서 해당 기능만 다시 수정하여 사용할 수 있게 하는 것이다. (다중 상속은 불가하다. 상속은 반드시 하나만 가능하다. 필요에 따라 인터페이스를 사용 가능하다)
5) 다형성은 무엇인가?
-> "하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것이다."
즉오버 라이딩(Overriding), 오버 로딩(Overloading)이 가능하다.
오버 라이딩 : 부모 클래스의 메서드와 같은 이름, 매개변수(파라미터)를 재정의 하는 것
오버 로딩 : 같은 이름의 함수를 여러 개 정의하고, 매개변수의 타입과 개수를 다르게 하여 매개변수에 따라 다르게 호출할 수 있게 하는 것
Getter/Setter 사용하는 이유
멤버 변수에 직접 접근하지 못하게 private로 접근 지정자를 설정하고 public으로 Getter/Setter 메서드를 만드는 것을 많이 경험했다. 아무나 접근이 가능한데 굳이 private로 설정할 필요가 있을까?라는 의문이 든다.
결론은 Getter/Setter를 사용하면 메서드를 통해서 접근하기 때문에, 메서드 안에서 매개변수 같이 어떤 올바르지 않은 입력에 따라 사전에 처리할 수 있게 제한하거나 조절할 수 있기 때문이다.
ex) Setter에서 유효 범위를 넘은 정수가 들어왔을 때의 처리를 하고 나서 set 하거나 예외처리를 해버릴 수 있다.
Getter도 마찬가지로 자료에 무언가 더하거나 빼고 주는 게 가능하다.
[출처]
객체 지향 프로그래밍이 뭔가요? (꼬리에 꼬리를 무는 질문 1순위, 그놈의 OOP)
객체 지향 프로그래밍(Object Oriented Programming) 여러 소프트웨어 관련 IT기업 신입사원 기술면접에서 면접자들 긴장을 풀어줄 겸 워밍업으로 자주 나오는 질문이다. "객체 지향 프로그래밍에 대해
jeong-pro.tistory.com