로운's 기술노트

[항해 5기] 2주차 Week I Learned (객체지향 프로그래밍/JVM) 본문

항해99_'22.01~04

[항해 5기] 2주차 Week I Learned (객체지향 프로그래밍/JVM)

로운's 2022. 1. 14. 19:50

[2주차(알고리즘) 테마 : 개념을 잘 소화하기!]

 

■ 객체지향 프로그래밍 (Object Oriented Programming)

ㅇ 정의

 : 여러 개의 객체 단위로 나누고 그 객체 간의 유기적인 상호작용을 통해 프로그래밍하는 작업 방식을 의미합니다. 

 

* 객체(Object)란?

 : 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고 다른 것과 식별 가능한 것을 말합니다.

 

 

ㅇ 장/단점

구분 객체지향 프로그래밍 절차지향 프로그래밍
개념 여러 객체 단위로 나누어 작업 여러 함수로 나누어 순차적 호출하여 작업
장점      - 협업이 중요한 대형 프로젝트에 적합
     - 코드의 재사용성(상속)
     - 개발 생산성 향상
     - 유지보수의 우수성(캡슐화)
     - 간단하고 소규모 프로젝트에 적합
     - 비교적 배우기 쉬움
단점      - 학습난이도가 높다
     - 개발자의 활용 능력 중요
     - 개발속도/실행속도가 느림
     - 오래된 방식
     - 협업하여 진행하는 큰 프로젝트에 부적합
종류 JAVA / C# / 시뮬라67 / 스몰토크
/ 오브젝티브-C / 파이썬 / C++ 등
포트란 / 모듈라-2 / 에이다 / 베이직
/ C / 알골 등

 

 

ㅇ 특징

1) 클래스 + 인스턴스(객체)

 - 클래스 : 어떤 문제를 해결하기 위해 데이터를 만들기 위해 추상화를 거쳐 집단에 속하는 속성(attribute)과 

              행위(behavior)를 변수와 메서드로 정의한 것

 - 인스턴스 : 클래스에서 정의한 것을 토대로 실제 메모리상에 할당된 것으로 실제 프로그램에서 사용되는 데이터

 

2) 추상화 : 객체의 공통적인 기능이나 속성을 묶어 이름을 붙이는 것입니다.

 

3) 캡슐화 : 객체의 메소드, 필드를 하나로 묶고, 실제 구현 내용을 감추는 것을 의미합니다

           (데이터와 코드의 형태를 외부에서 알 수 없게 함 → 정보은닉).

 

* 여기서 잠깐!

추상화와 캡슐화가 비슷해 보일 수 있습니다.
그러나 추상화는 구현 세부 사항을 포함하지 않고 필수 기능을 나타내어 일반화하는데 초점이 맞춰져있으며,
캡슐화는 구현에 대한 세부정보를 은닉화하고 데이터에 접근을 일관된 형식으로 유지하여 사용되는 기능과 특징을 모아두는데에 초점이 맞추어져 있습니다.

 

4) 상속 : 상위 객체가 가진 필드와 메소드를 하위 객체에 물려주어 쉽게 사용할 수 있도록 해주는 것이며,

        상위객체를 재사용하여 하위 객체를 쉽고 빨리 설계할 수 있도록 도와주고 반복된 코드의 중복을 줄여줍니다.

 

5) 다형성 : 같은 타입이지만 실행결과가 다양한 객체를 이용할 수 있는 성질을 말합니다. 코드 측면에서 보면 다형성은 하나의 타입에 여러 객체를 대입함으로써 다양한 기능을 이용할 수 있게 해줍니다.

 

 

■ JVM (JAVA Virtual Machine)

ㅇ 정의
 : '자바 가상 머신'의 준말로 쉽게 말해 자바 프로그램을 실행시키는 소프트웨어입니다.
JVM은 자바와 운영체제(OS)에서 중개자 역할을 하여 OS에 구애받지 않고 자바 프로그램을 실행할 수 있습니다.

 

ㅇ 기능

1) 자바 프로그램이 어느 기기, 또는 어느 운영체제 상에서도 실행될 수 있게 하는 것

   ("한 번 작성해, 어디에서나 실행한다"는 유명한 원칙)

2) 프로그램 메모리를 관리하고 최적화하는 것

 

 

 

■ 알고리즘 문제  *참조 : https://replit.com/~

ㄴ 꼭 다풀기!!!!!

 

-하하-
1. 직사각형 별찍기 https://programmers.co.kr/learn/courses/30/lessons/12969
2. 짝수와 홀수 https://programmers.co.kr/learn/courses/30/lessons/12937

-하-
3. 가운데 글자 가져오기 https://programmers.co.kr/learn/courses/30/lessons/12903
4. 두 정수 사이의 합 https://programmers.co.kr/learn/courses/30/lessons/12912
5. 문자열을 정수로 바꾸기 https://programmers.co.kr/learn/courses/30/lessons/12925
6. 없는 숫자 더하기 https://programmers.co.kr/learn/courses/30/lessons/86051
7. 음양 더하기 https://programmers.co.kr/learn/courses/30/lessons/76501
8. 평균 구하기 https://programmers.co.kr/learn/courses/30/lessons/12944
9. 핸드폰 번호 가리기 https://programmers.co.kr/learn/courses/30/lessons/12948
10. 행렬의 덧셈 https://programmers.co.kr/learn/courses/30/lessons/12950
11. x만큼 간격이 있는 https://programmers.co.kr/learn/courses/30/lessons/12954

 

-중하-
12. 부족한 금액 계산하기 https://programmers.co.kr/learn/courses/30/lessons/82612
13. 2016년 https://programmers.co.kr/learn/courses/30/lessons/12901
14. 나누어 떨어지는 숫자 배열 https://programmers.co.kr/learn/courses/30/lessons/12910
15. 내적 https://programmers.co.kr/learn/courses/30/lessons/70128
16. 문자열 내 p와 y의 개수 https://programmers.co.kr/learn/courses/30/lessons/12916
17. 문자열 다루기 기본 https://programmers.co.kr/learn/courses/30/lessons/12918
18. 서울에서 김서방 찾기 https://programmers.co.kr/learn/courses/30/lessons/12919
19. 수박수박수박수박수박수? https://programmers.co.kr/learn/courses/30/lessons/12922
20. 완주하지 못한 선수 https://programmers.co.kr/learn/courses/30/lessons/42576
21. 이상한 문자 만들기 https://programmers.co.kr/learn/courses/30/lessons/12930
22. 자릿수 더하기 https://programmers.co.kr/learn/courses/30/lessons/12931
23. 자연수 뒤집기 https://programmers.co.kr/learn/courses/30/lessons/12932
24. 내림차순으로 배치하기 https://programmers.co.kr/learn/courses/30/lessons/12933
25. 정수 제곱근 판별 https://programmers.co.kr/learn/courses/30/lessons/12934
26. 제일 작은 수 제거하기 https://programmers.co.kr/learn/courses/30/lessons/12935
27. 콜라츠 추측 https://programmers.co.kr/learn/courses/30/lessons/12943
28. 하샤드 수 https://programmers.co.kr/learn/courses/30/lessons/12947

 

-중-
29. 3진법 뒤집기 https://programmers.co.kr/learn/courses/30/lessons/68935
30. 최소직사각형 https://programmers.co.kr/learn/courses/30/lessons/86491
31. 같은 숫자는 싫어 https://programmers.co.kr/learn/courses/30/lessons/12906
32. 두 개 뽑아서 더하기 https://programmers.co.kr/learn/courses/30/lessons/68644
33. 로또의 순위 https://programmers.co.kr/learn/courses/30/lessons/77484
34. 모의고사 https://programmers.co.kr/learn/courses/30/lessons/42840
35. 문자열 정렬하기 https://programmers.co.kr/learn/courses/30/lessons/12915
36. 내림차순으로 배치하기 https://programmers.co.kr/learn/courses/30/lessons/12917
37. 소수 만들기 https://programmers.co.kr/learn/courses/30/lessons/12977
38. 숫자 문자열과 영단어 https://programmers.co.kr/learn/courses/30/lessons/81301
39. 시저 암호 https://programmers.co.kr/learn/courses/30/lessons/12926
40. 신규 아이디 추천 https://programmers.co.kr/learn/courses/30/lessons/72410
41. 약수의 개수와 덧셈 https://programmers.co.kr/learn/courses/30/lessons/77884
42. 약수의 합 https://programmers.co.kr/learn/courses/30/lessons/12928
43. 예산 https://programmers.co.kr/learn/courses/30/lessons/12982
44. 최대공약수와 최소공배수 https://programmers.co.kr/learn/courses/30/lessons/12940
45. K번째 수 https://programmers.co.kr/learn/courses/30/lessons/42748

 

-중상-
46. 나머지가 1이 되는 수 https://programmers.co.kr/learn/courses/30/lessons/87389
47. 소수 찾기 https://programmers.co.kr/learn/courses/30/lessons/12921
48. 실패율 https://programmers.co.kr/learn/courses/30/lessons/42889
49. 체육복 https://programmers.co.kr/learn/courses/30/lessons/42862
50. 폰켓몬 https://programmers.co.kr/learn/courses/30/lessons/1845

 

-상-
51. [1차] 비밀지도 https://programmers.co.kr/learn/courses/30/lessons/17681
52. 키패드 누르기 https://programmers.co.kr/learn/courses/30/lessons/67256
53. [1차] 다트 게임 https://programmers.co.kr/learn/courses/30/lessons/17682
54. 크레인 인형뽑기 게임 https://programmers.co.kr/learn/courses/30/lessons/64061

 

 

 

Comments