전체 글(301)
-
[OOP] 객체지향의 특징 - 다형성(Polymorphism)
다형성(Polymorphism) 객체지향 언어는 동일한 이름을 가진 메소드를 허용하지 않는다. 예를 들어, "먹는다"는 동작이 구현된 메소드가 있다고 가정하자. 먹는다는 동일한 동작이 구태여 두 개나 구현될 필요는 없다. 이러한 관점에서 본다면 메소드의 고유 아이덴티티라고도 불릴 수 있는 메소드명의 유니크화는 어쩌면 당연하다. 하지만 조금 생각해보면 좀 이상하다. JAVA는 타입에 죽고 타입에 산다. Javascript와 달리 파라미터에 아무타입이나 넣을 수 없기 때문에, 정해진 타입 이외의 무언가를 넣으면 컴파일 단계에서 가차없이 컷한다. One for One! 하나의 파라미터는 반드시 하나의 타입만을 가진다. 그말인즉슨, 동일한 메소드는 존재할 수 없으니, 해당 메소드에 입력할 수 있는 각각의 파라미..
2022.10.03 -
[OOP] 객체지향의 특징 - 상속(Inheritance)
객체지향에서의 상속이란 객체가 다른 객체를 상속받아 상속받은 객체의 요소를 사용하는 것을 의미한다. 이 때 객체를 상속받은 객체는 자식, 상속된 객체는 부모라 칭한다. 자식 객체는 상속된 부모 객체의 은닉화 구성에 따라 정해진 변수, 메소드에 접근할 수 있다. 또한 부모 객체가 추상 객체일 경우 추상 메소드와 오버라이딩을 통해 부모 객체의 메소드를 구현하거나 다룰 수 있다. 추상 객체 추상 객체는 하나 이상의 추상 메소드를 포함하는 객체다. abstract public class Main { // 메소드 } JAVA로 표현한 추상 클래스는 위와 같으며, 클래스의 맨 앞에 abstract 키워드를 적어 해당 객체가 추상 객체임을 표현할 수 있다. 추상 메소드 추상 메소드는 자식 객체에서 구현해야하는 메소드..
2022.10.02 -
[OOP] 객체지향의 특징 - 캡슐화(Encapsulation)와 정보 은닉
캡슐화(Encapsulation) 객체, 즉, 클래스의 내부 변수와 메소드를 하나로 패키징하는 특징이다. 객체에 선언된 변수나 메소드가 구분없이 중구난방으로 접근할 수 있다면 정상적인 객체로 보기 어렵다. 캡슐화와 비슷한 개념으로 정보 은닉이라는 개념이 있다. 정보 은닉은 객체의 내부 구현을 숨김으로써 객체가 반드시 정해진 메소드를 통해 상호작용하도록 유도한다. 이 두 개념은 객체의 응집도와 독립성을 높임으로써 객체의 모듈화를 지향한다. 객체의 모듈화가 잘 이루어져있을 경우 모듈 단위의 재사용이 매우 용이하다. 여러 로직에서 중복되는 코드를 모듈로 대체하면 모듈 내부의 소스만 수정하는 것으로 수정사항을 반영할 수 있다. 이는 곧 간편한 유지보수로 직결된다. 캡슐화의 예제 JAVA의 경우 접근제어자를 통해..
2022.10.02 -
[백준] 4179번: 불!
https://www.acmicpc.net/problem/4179 4179번: 불! 입력의 첫째 줄에는 공백으로 구분된 두 정수 R과 C가 주어진다. 단, 1 ≤ R, C ≤ 1000 이다. R은 미로 행의 개수, C는 열의 개수이다. 다음 입력으로 R줄동안 각각의 미로 행이 주어진다. 각각의 문 www.acmicpc.net 으 으 으 왕바보! 가장 빠른 탈출 시간을 출력하면 되기 때문에 BFS를 쓰면 쉬운 문제처럼 보이나 은근 까다로웠던 문제이다. 여기서 핵심은 불의 확산이다. 단계별로 불을 확산해야 하는데, 처음에는 한 배열에 불로만 표시하려고 불 여부만 판단하고 이를 상하좌우로 확산했다. 그런데 현재 단계와 이전 단계들의 구분이 없어져서, 결국 한 단계만에 모든 빈칸에 불이 확산되는 꼴이 되어버렸다..
2022.10.02 -
[병렬화] 병렬 프로그래밍이란?
병렬화 병렬 프로그래밍은 순차적인 직렬프로그램을 분할하고 분할된 단위를 동시에 병렬로 수행함으로써 성능을 향상하는 프로그래밍 기술이며, 이러한 전반적인 과정을 병렬화라고 한다. 병렬프로그래밍을 구현하기 위해서는 가장 먼저 성능의 병목지점인 병렬화 대상을 찾아야 한다. 또한 실제 병렬화가 가능한지에 대한 의존성 분석과 병렬화를 어떤 방식으로 진행할 건지에 대한 패턴 결정이 필요하다. 아래 그림은 병렬화의 전반적인 단계를 나타내고 있다. 병렬화 대상 찾기 병렬화를 수행할 때 가장 먼저 해야할 일은 바로 병렬화 대상을 찾는 것이다. 즉, 순차적인 코드에서 가장 많은 시간이 소요되는 병목구간을 찾는 것이다. 이러한 작업은 프로그래머가 직접 뒤져가며 찾아볼 수도 있지만, 일반적으로 프로파일링 도구의 힘을 빌리기도..
2022.10.02 -
[OOP] 객체 지향 (Object Oriented Programming)
객체란? 객체지향. 말그대로 객체를 지향하는 언어이다. 그러면 객체가 무엇인지를 알아야 한다. 객체란 프로그램 동작의 주체이다. 이 객체는 유/무형을 가리지 않는다. 객체는 실체가 명확하지 않은 무형의 개념일 수도 있다. 모든 객체는 상태와 동작을 가진다. JAVA는 이러한 개념을 아래와 같이 접근한다. 객체지향 JAVA 객체 클래스 상태 멤버 변수 동작 메소드(함수) JAVA에서 이러한 객체를 사용하려면 메모리에 할당해야 하고, 이렇게 할당한 객체는 인스턴스(instance)이다. Car 클래스를 메모리에 할당하여 새로운 인스턴스를 만드는 것은 현실에서 자동차 하나를 뽑는 것과 동일한 개념이다. 객체지향 모든 객체는 각 객체의 특성에 부합하는 상태와 동작을 가지며, 이를 통해 객체 간의 상호작용을 코드..
2022.10.01