본문 바로가기

방법

(10)
객체지향프로그래밍 (OOP) - 다형성 다형성(Polymorphism) - "이름은 하나인데~ 별명은 여러 개~" 정의 내 동생 곱슬머리 개구쟁이 내 동생이라는 동요를 알고 있는가? 더보기 내동생 곱슬머리 개구장이 내동생 이름은 하나인데 별명은 서너개 엄마가 부를때는 꿀돼지 아빠가 부를때는 두꺼비 누나가 부를때는 왕자님 어떤게 진짜인지 몰라몰라 몰라 내동생 곱슬머리 개구장이 내동생 이름은 하나인데 별명은 서너개 잘먹고 건강하게 꿀돼지 착하고 복스럽게 두꺼비 용감하고 슬기롭게 왕자님 어떤게 진짜인지 몰라몰라몰라 가사를 보면, 동생이라는 존재는 하나인데 그를 부르는 이름, 즉 그가 정의되는 방식은 여러 개임을 볼 수 있다. 다형성은 이와 같이 이름은 하나인데~ 별명은 서너 개~로, 하나의 객체를 여러 개의 타입으로 선언할 수 있는 개념을 말한다...
객체지향프로그래밍 (OOP) - 구성 구성(Composition) - "바구니 안에 담기" 정의 구성이란 객체들의 관계를 구축하는 방법으로, 한 객체가 다른 객체들을 멤버변수로 갖고 있는 것(HAS-A 관계)이다. 마치 메인보드, 식판, 배틀그라운드의 장비창과 같이 하나의 판이 된 객체들의 바구니의 이름을 짓은 것이 구성이라고 할 수 있다. (구성, 합성, 조합 등 다양한 말로 불린다.) 특히 메인보드의 경우는 구성을 잘 설명할 수 있을 것 같다. 자세한 (콤퓨타는 하나도 몰라서 틀려도 무시해주길..) 일단, 각자의 자리가 정해져있다. CPU 자리면 CPU가, SSD 자리면 SSD가, 파워 자리면 파워가 꽂힌다. 또한, 무조건 한 모델의 SSD만 들어갈 수 있는 것이 아니라 메인보드가 지원하는 소켓에 맞는 SSD라면 만든 회사에 상관없이 들..
객체지향프로그래밍 (OOP) - 상속 상속(Inheritance) - "역 계 문 강 목 과 속 종" 정의 상속이란 객체들의 관계를 구축하는 방법으로, 어느 한 객체가 다른 한 객체의 속성과 행위를 물려받아 사용하거나 재정의하는 것이다. 예를 들어, 과학 시간에 배웠던 생물 분류에서 알 수 있듯, 하위 분류는 상위 분류의 특성을 포함하고 그 안에서 다른 특성들이 나타난다(조류의 특징은 날개가 있다는 공통점). 그런데, 조류의 날개는 다 똑같지는 않다! 종마다 모두 다른 날개의 모양과 역할을 가지고 있다. 조류의 종마다 날개가 다르듯, 상속하는 객체의 일부 속성을 재정의하여 구현하는 것이 상속이 객체들 간의 관계를 정의하는 방법이다. 왜? 코드 세계에서 공통점이란, 중복을 의미한다. 다시 한번 말하자면, 공통점(중복)은 따로 빼서 한곳에서 관..
객체지향프로그래밍 (OOP) - 캡슐화 캡슐화(Encapsulation) - "서먹한 관계를 선사시켜드립니다~" 정의 캡슐화란 무엇인가? 또 딱딱하게 정의해보자면, 객체의 속성과 행위를 하나로 묶어 실제 구현 내용을 은닉하는 것이다. 또 다시 말하자면, 추상화로 지정한 범위를 울타리로 감싸주는 것이라고도 할 수 있다. 왜? 다른 사람이 내 전화번호, 키, 몸무게, 심지어 성별까지 바꿀 수 있으면 어떨까? 기분이 나쁜 것은 기본이고, 내 정체성에 문제가 생기고, 마치 드라마 의 주인공처럼 들쑥날쑥한 삶이 매우 피곤할 것이다(물론 주인공은 연애도 커리어도 성공하지만).객체도 마찬가지다. 다른 객체가 마음대로 자신을 조종하면, 반드시 문제가 발생하기 마련이다. 자! 이제 조금 더 자세히 캡슐화를 구현해야 하는 이유를 살펴보자. 캡슐화를 구현한다면,..
객체지향프로그래밍 (OOP) - 추상화 추상화(Abstraction) - "우리 비슷한 점이 많네요~ 일로 오세요~" 정의 추상화가 무엇인지 딱딱하게 정의해보자면, 객체들의 공통 속성과 행위를 추출하는 것이다. 처음 프로그래밍을 접하는 사람은 무슨 소리인지 잘 모를수도 있을 것 같다. 다시 쉽게 말해보면, 공통점을 찾아 이름짓기이다. 왜? 귀가 길고, 초식 동물이면서, 귀엽고, 갈색 털이고, 콧구멍이 큰 동물과 귀가 길고, 초식 동물이면서, 귀엽고, 흰색 털이고, 콧구멍이 작은 동물 등이 있다. 이 친구들을 항상 이렇게 길게 불러야 할까? 털과 콧구멍 말고도 차이점은 많겠지만, 같은 점이 더 많으니 하나의 이름으로 묶어주면 더 편할 것이다. 자, 이제 "귀가 길고 어쩌고 저쩌고"라 부를 필요 없이 토끼라고만 부르면 된다! 이렇게 되면 코드 상..
객체지향프로그래밍 (OOP) - 서문 Head First Design Patterns를 시작으로 진짜 객체지향(?)의 매력을 느낀 후 늦게나마 진짜 객체지향을 공부하기 시작했다. 이 좋은 것을 나만 알 수 없기에 부족한 실력이지만 다른 이들은 언어에만 시간낭비하지 않기 위해, 깨끗한 코드를 짜기 위해 객체지향을 정리해보려 한다. 왜 배워야 하나요? 계속 언어만 배워야 하나요.. 나는 중학생 때부터 프로그래밍을 했고 소프트웨어 프로그래밍 관련 특성화고를 졸업했다. 그러나, 학교 수업은 프로그래밍 언어 문법에 매우 의존하여 진행되었고 시험 또한 문법 문제밖에 없었다. 고등학교를 졸업하고 취업해야 하는데, 친구들은 언어와 프레임워크의 사용법만 알고 있었다. 이렇게 계속 언어만 배운다면 언어와 프레임워크에 종속되어 성장과 이직의 방해가 될 것이다...
[Programmers] 입양 시각 구하기(2) Oracle https://programmers.co.kr/learn/courses/30/lessons/59413 코딩테스트 연습 - 입양 시각 구하기(2) ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 programmers.co.kr Oracle -- 코드를 입력하세요 SELECT hours.hour, NVL(cnt, 0) "COUNT" FROM (SELECT TO_CHAR(datetime, 'HH24') as hour, COUNT(*) cnt FROM animal_outs GROUP BY ..
[Programmers] 보호소에서 중성화한 동물 Oracle https://programmers.co.kr/learn/courses/30/lessons/59045 코딩테스트 연습 - 보호소에서 중성화한 동물 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디 programmers.co.kr Oracle -- 코드를 입력하세요 SELECT ANIMAL_ID, ANIMAL_TYPE, NAME FROM ANIMAL_INS WHERE (ANIMAL_ID, 'X', 'O') IN (SELECT ins.ANIMAL_ID, CASE WHEN i..