오버로딩(Overloading)이란? 오버로딩은 같은 클래스 내에 여러 개의 같은 이름의 메서드를 정의하는 것이다. 이때 메서드의 이름은 같지만 매개변수(parameter)의 개수나 타입이 달라야 한다. return 값만 다른 것은 오버로딩이라고 볼 수 없다. 예를 들어 아래와 같이 Food 클래스 내에 여러 가지의 eat 메서드를 정의할 수 있다. public class Food{ void eat(Noodle noodle){ System.out.println("후루룩"); } void eat(Pizza pizza){ System.out.prinln("냠냠"); } void eat(Noodle noodle, Ramen ramen){ System.out.prinln("호로록~"); } } 같은 메서드 명이..
객체 지향 프로그래밍, 함수형 프로그래밍이란? 프로그래밍 패러다임은 크게 두 가지 종류로 나눠볼 수 있다. 명령형(Imperative) 프로그래밍과 선언형(Declative) 프로그래밍. 객체 지향 프로그래밍(OOP)은 명령형 프로그래밍, 함수형 프로그래밍은 선언형 프로그래밍에 속한다. 객체 지향 프로그래밍은 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 프로그래밍 패러다임 중 하나이다. 함수형 프로그래밍은 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다. 특히, 함수형 프로그래밍은 최근 들어 각광 받는 프로그래밍 패러다임이라고 할 수 있다. 개발 속도를 높여 생산성을 높이고, ..
명령형(Imperative) 프로그래밍 명령형 프로그래밍이란 프로그램의 상태와 상태를 변경시키는 구문의 관점에서 연산을 설명하는 프로그래밍 패러다임의 일종이다. 쉽게 설명하자면, 컴퓨터가 수행할 명령들을 순서대로 써 놓은 것이라고 볼 수 있다. 이러한 명령형 프로그래밍은 "how to solve it", 즉 어떻게 그것을 해결할 것인가에 관심이 있다. 거의 대부분의 컴퓨터 하드웨어는 명령형으로 구현된다. 거의 모든 컴퓨터 하드웨어들은 기계어를 실행하도록 설계되어 있는데, 보통 이것이 명령형으로 써져 있다. 포트란, ALGOL, C언어 등이 명령형 프로그래밍 언어의 일종이다. 선언형(Declarative) 프로그래밍 선언형 프로그래밍은 보통 두 가지 뜻으로 통용된다. 첫 번째는 프로그램이 무엇을 해야 할지..
다양한 프로그래밍 언어 소스코드 품질평가 기업인 TIOBE index에서는 평점이나 선호도를 기반으로 프로그래밍 언어의 순위를 평가하고 발표한다. 티오베 인덱스에 따르면 2022년 6월 현재 1순위는 Python이 차지하고 있는 것을 확인할 수 있다. 그 뒤로 C언어, Java, C++ 등이 위치하고 있음을 확인할 수 있다. 이처럼 1위부터 4위까지를 차지하고 있는 C, C++, Java, Python에 대하여 비교, 분석해보자. ※ 본 포스팅을 읽기 전 참고하면 좋은 글들 : [프로그래밍 언어론] 객체 지향 프로그래밍(OOP : Object Oriented Programming)란? OOP의 장단점 객체 지향 프로그래밍(OOP)과 객체(Object) 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목..
형변환(Type Conversion)이란? int a = 10; float b = 1.2; printf("%d", a+b); 형변환이란 데이터의 타입을 변경하는 것이다. 예를 들어 위와 같이 데이터 타입이 다른 두 변수를 더하는 연산을 하려고 하면 어떻게 될까? 오류가 발생하지는 않고 묵시적 형변환이 일어나게 된다. 묵시적 형변환(Implicit Type Conversion)이란? 묵시적 형변환이란 컴파일러에 의해 자동으로 형변환이 이루어지는 것을 말한다. 예를 들어 int a 와 float b를 더할 때 int a는 자동으로 float형으로 형변환이 이루어진다. 묵시적 형변환은 위 그림처럼 표현 범위가 좁은 데이터 타입에서 -> 넓은 데이터 타입으로의 변환만 허용된다. 예를 들어 int 형은 doubl..
객체 지향 설계 5원칙 객체 지향 설계에는 다음과 같은 5가지 원칙이 있다. 1. SRP (Single Responsibility Principle) : 단일 책임 원칙 2. OCP (Open-Closed Principle) : 개방 폐쇄 원칙 3. LSP (Liskov Substitution Principle) : 리스 코프 치환 원칙 4. ISP (Interface Segragation Principle) : 인터페이스 분리 원칙 5. DIP (Dependency Inversion Principle) : 의존 관계 역전 원칙 앞 글자들을 모아 SOLID라고 부르기도 한다. 1. SRP (Single Responsibility Principle) : 단일 책임 원칙 하나의 클래스는 하나의 책임만 가져야..
컴파일러(Compiler)란? 컴파일러는 특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언어로 옮기는 언어 번역 프로그램을 말한다. (출처:https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC) 컴파일러는 high-level 프로그래밍 언어(ex: C언어)를 low-level 언어(ex: 어셈블리어)로 바꾸어 실행 프로그램을 만들기 위해 사용된다. 원래의 문서를 소스코드 혹은 원시 코드라고 부르고, 출력된 문서를 목적 코드라고 부른다. 원시 코드에서 목적 코드로 옮기는 과정을 컴파일이라고 한다. 인터프리터(Interpreter)란? 인터프리터는 프로그래밍 언어의 소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경을 말한다. (..
객체 지향 프로그래밍(OOP)과 객체(Object) 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 컴퓨터 프로그래밍의 패러다임 중 하나이다 객체 지향 프로그래밍에서 객체(Object)란 실제 사물을 프로그래밍으로 옮겨와 모델링하는 것으로 자신의 속성(PROPERTY)과 행위(Method)를 가지고 있다. 객체의 속성은 객체의 상태, 성질, 데이터 등을 의미하고, 행위란 객체의 기능이나 데이터를 조작하는 연산 등을 의미한다. 객체의 데이터를 사용하기 위해서는 메시지 전송(message Sending)을 통해 간접적으로 데이터를 얻어와야 한다. 객체지향 프로그래밍은 아래와 같이 크게 4가지의 특징을 가지고 있..
파라미터 전달 방식 프로그래밍을 공부한 사람은 다들 Call by value 혹은 Call by reference 등에 대해 들어본 적이 있을 것이다. 이는 함수 호출 방식을 값에 의한 호출, 참조에 의한 호출로 구분한 것이다. 함수 호출 방식에 따라 파라미터 전달 방식이 달라지는데, 이에 대해 알아보자. Pass by value (= Call by value) 1. Pass by value는 함수의 파라미터로 변수의 값을 복사해서 전달하는 방식이다. 2. 즉, 원래의 값에 영향을 주지 않고 함수 내로 복사된 값을 전달한다. 3. 값을 복사하기 때문에 변수의 크기가 클수록 비용이 증가하게 된다. 4. 따라서 크기가 큰 변수를 파라미터로 전달할 때 적절한 방법이 아니다. 5. 원래의 값이 변경되면 안 되는..
단축 평가 계산 (Short-circuit Evaluation) 단축 평가 계산이란 첫 번째 인수가 값을 결정하기에 충분하지 않은 경우에만 두 번째 인수가 평가되는 일부 프로그래밍 언어(C, C++, JAVA 등)의 일부 논리 연산(AND, OR)의 계산이다. 예를 들어 C언어의 경우를 들어보자. int i=1; int j=2; if( ij가 거짓이므로 논리 연산 AND(&&)의 결과 값이 무조건 거짓이 되기 때문에 뒤의 연산을 진행하지 않는다. 따라서 i=3은 실행되지 않는다. 단축 평가 계산을 염두에 두고 프로그래밍한다면 시간 복잡도를 줄일 수 있다. 예를 들어 아래와 같은 경우를 살펴보자. // func1() - 1초 소요 // func2() - 100초 소요 /* 첫번째 방법 */ if( func..