일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 파이썬
- 유니크 키
- 객체지향 프로그래밍
- OOP
- 운영체제
- 백준
- 프로세스
- springboot
- 코딩 테스트
- unionfind
- 디바이스 입출력
- error
- stack
- OS
- SW Expert Academy
- Python
- 다익스트라
- java
- DP
- BFS
- 스택
- DFS
- 캡슐화
- 큐
- 백준 #
- queue
- 데드락
- 자료구조
- 논리 메모리
- integretion test
- Today
- Total
목록OOP (10)
middlefitting
이 글은 객체지향 프로그래밍 캡슐화 개념을 모르시거나 모호하다고 느끼는 분들을 위한 글입니다. 다음과 같은 내용으로 시작합니다. 우리는 OOP 4대 원칙인 캡슐화를 준수하기 위해, 흔히 멤버 변수를 접근 제어자를 통해 숨기고 getter, setter 메서드를 통해 우회해서 접근 및 수정하도록 합니다. 근데 이 부분에서 우리는 다음과 같은 의문을 가지게 됩니다. 접근 제어자 걸어도 getter, setter 선언하면 public으로 선언하는 것과 캡슐화 측면에서 무슨 차이가 있는걸까? 그말이 그말인것 같은데 무슨 차이가 있으며, getter setter가 왜 캡슐화를 위해 사용된다는 것인지 의문을 품게 되는 것입니다. 결론을 이야기 하자면 차이가 없습니다. 즉 캡슐화를 위배한다는 것은 다를바가 없는 것이..
메서드 오버로딩이란 메서드 오버라이딩이란 상위 클래스에서 이미 정의된 메서드를 하위 클래스에서 다시 정의하는 것을 말합니다. 하위 클래스는 상위 클래스보다 많은 멤버를 가지게 되고, 이러한 특성은 자연스럽게 메서드 오버라이딩이 필요한 여러 상황을 만들게 됩니다. 메서드 오버라이딩을 통해 하위 클래스는 상위 클래스의 메서드를 재사용하면서 자신만의 새로운 기능을 추가할 수 있습니다. 메서드 오버라이딩의 목적 메서드 오버라이딩의 목적을 좀 더 자세히 살펴보면 다형성 구현, 유지보수성 향상, 확장성 확보가 존재합니다. 하나씩 살펴보면 다음과 같습니다. 다형성 구현 하위클래스는 상위 클래스의 메서드를 재정의함으로써 하위 클래스 동작 방식을 다양화할 수 있습니다. 유지보수성 향상 부모클래스의 메서드가 변경되는 것은..
추상화란 추상화는 객체지향 프로그래밍의 4대원칙 중 하나로, 객체의 공통적인 특성을 추출하여 인터페이스나 추상 클래스로 정의하는 것을 말합니다. 이들은 공통적으로 추상 메서드를 가지고 있으며 추상 메서드는 구현된 것이 전혀 없는 설계도라고 할 수 있습니다. 추상화를 통해 객체의 복잡한 내부 구현을 숨기고 객체 간의 관계를 단순화할 수 있습니다. 더불어 추상화는 상속, 다형성, 캡슐화와 함께 사용됨으로써 객체지향 프로그래밍의 핵심인 객체의 코드 유지보수성과 가독성을 제공할 수 있습니다. 추상화를 왜 사용하여야 할까? 추상화를 사용하면 다음과 같은 장점을 얻을 수 있습니다. 1. 필요한 정보에만 집중 객체의 내부 구현은 객체를 구성하는 속성과 메서드 등으로 이루어져 있습니다. 그리고 이 내부 구현은 종종 매..
다형성이란 객체지향의 4대원칙중 하나로 다형성을 잘 이해해야 객체지향을 잘 이해할 수 있다고 합니다. 다형성이란 단어 그대로 여러가지 형태를 가질 수 있는 능력을 말합니다. 다른 말로는 조상 타입의 참조 변수로 자손 타입의 객체를 다룰 수 있는 것을 말합니다. "부모는 자식을 품을 수 있다" 라는 문장을 통해 좀 더 편하게 외우실 수 있습니다. 다형성 예시 import java.util.Objects; public class Parent { String house; } class Child extends Parent{ public Child(String house) { this.house = house; } void print_variable() { System.out.println(house); } }..
상속이란 객체지향 프로그래밍에서 상속이란 기존의 클래스로 새로운 클래스를 작성하는 것을 말합니다. 즉 상속을 통해 두 클래스를 부모와 자식의 관계를 맺어줄 수 있습니다. 상속 규칙 상속에 있어서 다음과 같은 규칙들이 존재합니다. 1. 자손은 생성자와 초기화 블록을 제외한 조상의 모든 멤버를 상속받는다. 다음과 같은 코드를 통해 이해할 수 있습니다. public class Parent { String house = "Seoul"; } class Child extends Parent{ int age = 20; void print_variable() { System.out.println(house); System.out.println(age); } } class main_logic { public static..
캡슐화는 OOP의 4대원칙 중 하나로 원칙인 만큼 매우 중요합니다. 클래스는 서로 관련이 있는 변수와 함수를 하나의 객체로 모아주는 역할을 수행하는데요, 캡슐화는 이러한 클래스의 멤버를 외부에서 쉽게 접근하지 못하게 정보를 은닉하는 것을 말합니다. 정보를 은닉하면 뭐가 좋을까 우선 캡슐화를 하지 않고 객체의 인스턴스 변수를 외부에서 접근하는 것은 객체지향스럽지 않습니다. 4대 원칙에 어긋나니까 당연한 말이지만 어떤 부분에서 그럴지 생각을 해보자면 왜냐하면 객체는 클래스에 있는 메소드로서 자신의 작업을 수행하게 되는데, 클래스에 정의되지 않은 동작으로 객체를 사용하게 되는 것이기 때문입니다. 더불어 그러한 의도되지 않은 동작은 오류의 범위를 크게 만들 것임은 분명합니다. 그래서 클래스의 정보를 은닉함으로써..
this와 this()에 이어 super와 super()에 대해 알아보도록 하겠습니다. 이 둘도 완전히 다른 내용인데요, 결론부터 말하면 super는 조상의 멤버를 가리키며, 조상의 멤버를 자신의 멤버와 구분하기 위해 사용하고, super()는 조상의 생성자를 호출하는데 사용합니다. 참조변수 super public class Chair { String color; int weight = 20; } class ChairChild extends Chair{ int weight = 10; void info() { System.out.println(super.weight); System.out.println(weight); } public static void main(String[] args) { ChairC..
this() 와 this 의 차이 개인적으로 생성자 this()와 참조 변수 this는 상당히 낯선 친구들이었습니다. 둘의 차이는 완전히 다른 존재라는 것입니다. 비슷하게 생기긴 했지만 말이죠. 어떤 역할을 하는지 하나씩 알아보도록 하겠습니다. 생성자 this() this()는 생성자에서 호출하는 다른 생성자를 말합니다. 생성자에서 다른 생성자를 호출하는 경우는 무엇이 있을까요. 다양한 이유가 있겠지만 결국 코드의 중복을 줄이기 위해 사용할 것입니다. 생성자는 오버로딩이 가능한데 생성자마다 인스턴스 변수를 초기화하는 과정이 겹칠 수 있으니 그러한 부분을 줄일 수 있다는 것입니다. 예를 들어 다음과 같은 경우 활용할 수 있을 것입니다. public class Chair { String color; int ..
클래스에 존재하는 변수 자바 클래스에서 사용할 수 있는 변수의 종류에 대해 알아보도록 하겠습니다. Class에 존재하는 변수는 크게 4종류로 나누어 볼 수 있습니다. 그들은 인스턴스 변수, 클래스 변수, 지역 변수, 매개 변수입니다. 인스턴스 변수 (Instance Variables) 인스턴스 변수는 클래스 영역에 선언된 변수를 말합니다. 멤버 변수라고 표현하기도 합니다. 다음과 같이 정의를 할 수 있습니다. public class HelloInstance { int age; String name; } 이렇게 클래스 내부에 선언된 변수를 인스턴스 변수라고 합니다. 인스턴스 변수는 이름처럼 인스턴스가 생성되었을 때 생성이 되게 됩니다. 이러한 인스턴스 변수는 메서드에서 참조할 수 있고, 생성자에서도 사용할..
객체지향 프로그래밍(OOP)에서는 이름값 하듯이 객체가 아주 중요합니다. 객체와 클래스라는 개념은 같이 따라오게 되는데요 클래스는 설계도, 객체는 설계도대로 만든 구현체(물건)입니다. 객체(Object) 클래스를 알아보기 전에 객체가 무엇인지 알아보겠습니다. OOP에서 객체는 구현체, 실제로 존재하는 사물을 뜻하는데요, 속성(변수)과, 기능(메서드)를 가질 수 있습니다. 이것이 무슨 말일까요 객체는 속성을 가질 수 있다. 속성을 가진다는 것은 변수를 가질 수 있다는 것을 말합니다. 일단 변수로는 이러한 것들이 있겠습니다 Stringname; intage; 여기서 보시면 int는 Java의 기본 자료형입니다. 그리고String은 기본 자료형이 아니죠. class 자료형입니다. 즉 객체는 속성으로 기본 자료..