You Can Become A
늦게 시작해도 누구든지 노력하면 개발자가 될수 있어요 !
💠 상속을 자제하고 합성(Composition)을 이용하자
상속과 합성 개념 정리 프로그래밍을 할때 가장 신경 써야 할 것 중 하나가 바로 코드 중복을 제거하여 재사용 함으로써 변경, 확장을 용이하게 만드는 것이다. 그런 관점에서 상속과 합성은 객체지향 프로그래밍에서 가장 널리 사용되는 코드 재사용 기법이다. 상속(Inheritance) 합성(Composition) 부모 클래스와 자식 클래스 사이의 의존성은 컴파일 타임에 해결 두 객체 사이의 의존성은 런타임에 해결 is-a 관계 has-a 관계 부모클래스의 구현에 의존 결합도가 높음. 구현에 의존하지 않음. 내부에 포함되는 객체의 구현이 아닌 인터페이스에 의존. 클래스 사이의 정적인 관계 객체 사이의 동적인 관계 부모 클래스 안에 구현된 코드 자체를 물려 받아 재사용 포함되는 객체의 퍼블릭 인터페이스를 재사용 ..
📘 타입스크립트 제네릭 타입 함수 분석 & 만들기
우리가 자바스크립트에서 많이 쓰이는 forEach() 나 map() 같은 고차함수는 타입스크립트에서도 당연히 사용할 수 있다. 하지만 타입스크립트에선 각 인수 마다 타입을 지정해주어야 돌아가는데, 기존의 자바스크립트 메소드에 어떻게 타입을 설정하였기에 타입스크립트에서도 고차함수에서 사용할 수 있는 것일까? 실제로 제네릭으로 타입이 지정이 되있어서 타입스크립트에서도 무리없이 사용이 가능한 것이다. 지금부터 실제로 타입스크립트에 설정되어있는 기존의 자바스크립트 고차함수가 제네릭으로 어떤식으로 설정되어있는지 하나하나 분석하면서 확실히 제네릭을 이해해보는 시간을 가져보자. 실전 라이브러리 제네릭 타입 분석하기 forEach 타입 분석하기 가장 많이 쓰이는 forEach 의 제네릭을 분석해보자. 다음 코드를 타입..
💠 객체의 결합도 & 응집도 의미와 단계 💯 총정리
소프트웨어의 모듈 독립성 자고로 프로그래밍이란 문제를 정의하고 하나씩 해결해나가는 과정을 말한다. 만약 문제가 복잡하고 큰 문제라면, 일반적으로 문제를 작은 부분으로 쪼개어서 하나씩 풀어나가게 될 것인데, 이 때 문제를 작은 부분으로 쪼개나가는 것을 모듈화라고 한다. 모듈은 소프트웨어를 각 기능별로 나누어진 소스 단위를 말한다. 독립적으로 컴파일 가능한 프로그램 혹은 하나의 함수나 클래스도 모듈이 된다. 보통 좋은 소프트웨어 일수록 모듈의 독립성이 높다고 한다. 좋은 모듈화는 목적에 맞는 기능만으로 모듈을 나누게 되는데, 각각의 모듈은 주어진 기능만을 독립적으로 수행하기 때문에 재사용성이 높고 코드의 이해/수정이 용이하기 때문이다. 예를들어 해당 모듈을 수정하더라도 다른 모듈에 끼치는 영향이 적게 되며,..
💠 OOP 캡슐화 & 정보 은닉 개념 완벽 이해하기
캡슐화 (Encapsulation) 캡슐화란 쉽게 말하면 변수나 메소드들을 캡슐로 감싸서 안보이게 하는 정보 은닉 개념중 하나이다. 우리가 먹는 알약을 생각해보면 된다. 알약의 실제 약 내용은 가루약이지만, 이것을 캡슐로 감싸면서 맛을 은닉하여 사람이 먹기 편하게 하였으며, 또한 복잡한 재료들의 배합을 캡슐로 포장하여 다루기 편하게 하였다. 이처럼 캡슐화는 객체의 속성(Field)과 행위(Method)를 하나로 묶고, 외부로 부터 내부를 감싸 숨겨 은닉한다. 또한 외부의 잘못된 접근으로 값이 변하는 의도치 않는 동작을 방지하는 보호 효과도 누릴 수 있다. 자바에서는 대표적으로 protected , default , private의 접근제어자를 통해 구현이 가능하다. class Time { private ..
💠 자바의 다형성(Polymorphism) 완벽 이해하기
다형성 (Polymorphism) 다형성(多形性) 이란, 그 자체의 의미를 표준 국어사전에서 찾아보면, '같은 종의 생물이면서도 어떤 형태나 형질이 다양하게 나타나는 현상' 이라 정의되어 있다. 이를 프로그래밍에 대입해보면, 다형성(polymorphism)이란 같은 자료형에 여러가지 타입의 데이터를 대입하여 다양한 결과를 얻어낼 수 있는 성질을 의미한다. 이를 통해 조상 클래스의 참조 변수로 자손 클래스의 참조 변수를 다루거나, 동일한 이름을 같은 여러 형태의 매소드를 만들 수 있다. 자바에선 대표적으로 오버로딩, 오버라이딩, 업캐스팅, 다운캐스팅, 인터페이스, 추상메소드, 추상클래스 방법이 모두 다형성에 속하다고 생각하면 된다. 즉, 다형성은 클래스가 상속 관계에 있을때 나타나는 다채로운 성질 인 것이..
💠 객체 지향 개념과 추상화 완벽 이해하기
객체 지향(OOP) 개념과 특징 객체 지향 프로그래밍 이란, 많은 객체(Objcet)들이 모여서 상호 협력하면서 데이터를 처리하는 방식의 프로그래밍 설계 방법을 일컫는다. 좀더 쉽게 말하면, 프로그램을 묶음 단위로 잘게 쪼개서, 추후에 가져다 쓰기 편하게 만들어 놓은 프로그래밍 방식이라고 보면 된다. 이처럼 레고 블럭 조립하듯이 컴포넌트를 유연하고 변경이 용이하기 때문에, 현업에서 대규모 소프트웨어 개발에 많이 사용된다. 대표적으로 많이 알려진 Java언어를 포함하여 Ruby Python, C++, Objectivc-C, C#, Kotlin 등이 모두 객체지향 요소를 가진 언어이다. 객체 지향 설계 전략은 꼭 반드시 객체 지향 언어(Java, kotlin 등)에서만 사용되는 것은 아니다. 자바스크립트나 ..
💽 IntelliJ - Class Diagram & Sequence Diagram 그리는법
클래스 다이어그램 그리기 설계 보고서를 작성하거나 클래스 구조를 전체 그림으로 확인해야할 때 UML 클래스 다이어그램을 그릴 일이 있을 것이다.인텔리제이에서는 소스 파일만 있다면 자동으로 클래스 다이어그램을 그려주는 기능이 내장 되어 있다. 기본 사용법은 아래 링크에서 익힐수 있다. UML class diagrams | IntelliJ IDEA www.jetbrains.com 클래스 다이어그램 생성하는 방법은, 클래스 파일들을 선택하고 → 오른쪽 마우스 클릭 → Diagrams → Show Diagram을 선택하면 된다. 꼭 클래스파일을 선택할 필요없고 패키지 채로도 가능하다. UML 다이어그램 메뉴 사용법 클래스 다이어그램을 생성하였지만 클래스명만 딸랑 있고 너무 함축되어 있다. 상단의 UML 다이어그..
🚀 JAVA 문자 ↔ 숫자 형변환 방법 모음
문자 → 숫자 형변환 String → Int Integer.parseInt() : 문자열 파싱하여 int 객체 생성 Integer.valueOf() : 문자열로 Integer 객체 생성. 따로 initValue() 로 int 형으로 형변환 필요 String str = "123456"; int num = Integer.parseInt(str); String str2 = "123456"; int num2 = Integer.valueOf(str).initValue(); // 원래는 initValue() 를 써야하지만 안써도 자동 형변환이 일어나기 때문에 상관없음 NumberFormatException 예외처리 만일 숫자 형태가 아닌 문자열을 숫자로 변환할 때, NumberFormatException이 발생하게..
☕ 인터페이스 vs 추상클래스 용도 차이점 - 완벽 이해
인터페이스 vs 추상클래스 비교 이 글을 찾아보는 독자분들은 아마도 이미 인터페이스와 추상클래스 개념을 학습한 뒤에 이 둘에 대하여 차이의 모호함 때문에 방문 했겠지만, 그래도 다시한번 확실하게 한번 더 짚고 넘어가보자. 추상 클래스 인터페이스 사용 키워드 abstract interface 사용 가능 변수 제한 없음 static final (상수) 사용 가능 접근 제어자 제한 없음 (public, private, protected, default) public 사용 가능 메소드 제한 없음 abstract method, default method, static method, private method 상속 키워드 extends implements 다중 상속 가능 여부 불가능 가능 (클래스에 다중 구현, 인..
☕ 인터페이스(Interface) 문법 & 활용 - 완벽 가이드
인터페이스 정의 (친숙하게 설명) 객체 지향 프로그래밍의 추상화를 배우고 추상 클래스를 접해봤다면 그 다음 접해보는 것이 인터페이스(Interface) 일 것이다. 인터페이스는 간단히 말하자면 프로그램을 설계하고 조금 더 유연한 프로그램을 만드는 기법을 말한다. 인터페이스는 추상화와 상속과 더불어 다형성이라는 객체 지향의 특징을 구현하는 핵심이다. 실생활의 인터페이스 인터페이스(Interface) 라는 용어는 꼭 자바(java)에만 있는 것이 아니다. 위키 백과에 따르면, 인터페이스는 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면이라고 한다. 즉, 사용자가 기기를 쉽게 동작시키는데 도움을 주는 상호작용 시스템을 의미한다. 이러한 정의를 자바 프로그래밍에 접목해보..
☕ 추상 클래스(Abstract) 용도 완벽 이해하기
추상 클래스 와 추상화 우리가 지금 까지 사용해왔던 일반적인 클래스는 구체적(concrete)으로 데이터를 담아 인스턴스화 하여 직접 다루는 클래스이다. 그 반대로 추상 클래스는 구체적이지 않은 추상적인(abstract) 데이터를 담고 있는 클래스이다. 그래서 추상 클래스는 일반 클래스와 달리 인스턴스 화가 불가능한 클래스이며, 추상 클래스를 선언 할때는 abstract 키워드를 사용한다는 차이점이 있다고 말하곤 한다. 하지만 착각하지 말아야 할 것이, 추상클래스의 문법적인 특징이나 객체 생성이 되고 안되고 이런 특징들은 중요한게 아니다. 추상 클래스가 무엇이고 왜 사용하는지 본질적인 개념부터 알아야 자연스럽게 객체 지향 프로그래밍의 추상 클래스 용도를 이해할 수 있다. 객체 지향 프로그래밍의 특징에 대..
☕ 자바 객체 지향(OOP) 클래스 문법 - 한방 가이드
클래스(class) 구성 자바에서 클래스(class)란 객체를 정의하는 틀 또는 설계도와 같은 의미로 사용된다. 자바에서는 이러한 설계도를 가지고, 여러 객체를 생성하여 사용하는 식으로 프로그래밍을 이어나간다. 클래스는 객체의 속성 변수를 나타내는 필드(field)와 객체의 함수를 나타내는 메소드(method)로 구성되어있다. 클래스, 객체, 인스턴스, 메서드, 필드 등 자바 객체 지향 프로그래밍을 배우다 보면 정말 많은 용어들이 나온다. 특히 클래스나, 객체, 인스턴스 부분은 비슷하면서도 구분이 되어 있어 많이 혼동하는 편이다. 누군가에게 설명하기 위해서는 용어를 정확히 구분해서 사용해야하기 때문에 확실히 정리하고 넘어가자. 클래스 : 객체 데이터를 만드는 템플릿(설계도) 객체 : 클래스(템플릿)과 n..