목록Language (122)
우노
"객체 지향 프로그래밍에 대해 설명 한 번 해주세요." 여러 SW기업 신입사원 기술면접에서 워밍업 느낌으로 면접자들의 긴장을 풀어줄 겸 처음으로 자주 나오는 질문이다. 가장 기본이면서 이것마저 대답을 명확하게 못하면 첫인상이 안 좋아지는(?) 결과를 만드는 질문이며, 워밍업 같지만 꼬리에 꼬리를 무는 모든 질문의 시작(?)이다. 객체 지향 프로그래밍(Object-Oriented Programming, OOP)이란? 객체 지향 프로그래밍은 컴퓨터 프로그래밍 패러다임중 하나로, 프로그래밍에서 필요한 데이터를 추상화시켜, 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법 이다. 이러면, 이제 꼬리에 꼬리를 무는 질문이 시작된다. "객체 지향 프로그래밍을..
오버로딩(Overloading)과 오버라이딩(Overriding) 자바에서 다형성을 지원하는 방법으로 메소드 오버로딩(Overloading)과 오버라이딩(Overriding)이 있다. 오버로딩(Overloading)과 오버라이딩(Overriding)의 개념은 다르지만, 이름이 비슷해 참 헷갈린다. 오버로딩(Overloading) : 같은 이름의 메소드를 여러 개 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술 오버라이딩(Overriding) : 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의 해서 사용하는 기술 오버로딩(Overloading) 간단한 예제 코드를 통해 알아보자. Overloadingtest.java public class Overloadingtest { // 기본 test(..
상속(Inheritance)이란? 상속에 대해서 다루기 전에 우선, OOP(Object-Oriented Programming, 객체지향프로그래밍)가 무엇인지에 대해 알고 있어야한다. OOP는 다음과 같은 특징을 가지고 있다. 상속과 인터페이스 (계층성) 다형성, 사용편의성 (모듈화) 캡슐화, 정보은닉 자료 추상화 (모델링) 동적 바인딩 아래 그림을 통해, 상속에 대해 이해해보자. 상자 하나하나는 모두 객체(Object)이고, 자바 용어로는 Class이다. 이러한 계층을 표현하기 위해 만들어진 것이 바로 상속이다. 상속 시, 하위 객체(자식)는 상위 객체(부모)의 특징(메소드, 변수 등)을 물려받게 된다. 이 때, 상위 객체(부모)의 특징(메소드, 변수 등)을 '새롭게 구현'하는가, '..
Superinterface란? 예제 코드 public interface A { void doSomething(); } public interface B extends A { void doSomethingElse(); } 위 예제코드에서, interface A는 interface B의 Superinterface이다. 즉, interface B는 interface A로부터 상속된다. 따라서, 자식(B)는 부모(A)의 메소드를 그대로 사용할 수 있으며, 오버라이딩 할 필요 없이 부모(A)에 구현되어 있는 것을 직접 사용가능하다.
오류 RStudio를 사용해 데이터를 출력하는 경우, 출력 항목이 매우 길다면 다음 경고가 발생한다. [ reached getOption("max.print") -- omitted 800 entries ] 해결 방법 options 명령을 통해 출력 제한을 늘리면 된다. options(max.print=1000000)
import numpy as np # dataframe 생성 data = np.array([[1,4],[2,5],[3,6]]) df = pd.DataFrame(data, columns=['col1','col2']) # col1 col2 #0 1 4 #1 2 5 #2 3 6 # dataframe에 numpy 배열 추가 col3 = np.array([7,8,9]) df['col3'] = col3 # col1 col2 col3 #0 1 4 7 #1 2 5 8 #2 3 6 9
2차원 dictionary 생성 및 요소 추가 name = {} info = {} info['live'] = 'seoul' name['unho'] = info #{'unho': {'live': 'seoul'}}
np.where() np.where(조건, True일 때 값, False일 때 값) np.where을 사용하면 편리하게 배열 요소를 변환할 수 있습니다. 또한, 벡터 연산을 하므로 for loop을 돌지 않아서 속도가 매우 빠릅니다. import numpy as np a = np.arange(-5, 5) # array([-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]) b = np.where(a < 0, 0, a) # 0보다 작은 수는 0으로 나머지는 그대로 변환되며 # 원래의 배열 a는 변경되지 않고 그대로 있습니다. # array([0, 0, 0, 0, 0, 0, 1, 2, 3, 4])
밑이 자연상수 e인 지수함수(e^x)의 그래프 numpy.exp() Numpy의 numpy.exp() 함수는 밑이 자연상수 e인 지수함수(e^x)로 변환해줍니다. 결과값이 inf라면, 해당 값이 무한대(infinite)라는 것입니다. import numpy as np print(np.exp(0)) # e^0 와 동일 # 1.0 print(np.exp(1)) # e^1 와 동일 # 2.718281828459045 print(np.exp(10)) # e^10 와 동일 # 22026.465794806718 x = np.array([0.00001, 1, 2, 4, 10, 100]) print(np.exp(x)) #array([ 1.00001000e+00, 2.71828183e+00, 7.38905610e+00,..
정규표현식이란? 정규 표현식(regex)은 특정한 규칙을 가진 문자열 검색 및 치환에 사용됩니다. 정규표현식은 컴파일 설정과 문자열 검색 및 치환 설정을 통해 사용할 수 있습니다. 간단한 사용 예제 import re # 탐색할 문자열 sentence = "123 456 789" # 컴파일 설정 (연속된 숫자를 검색) rule = re.compile('[0-9]+') # 해당 컴파일 설정 규칙을 사용해, 문자열 탐색 result = rule.findall(sentence) # 결과 출력 print(result) 컴파일 설정 방법 re.compile() 을 사용해 어떤 규칙을 가지는 문자열들을 검색 및 치환할 건지 설정할 수 있습니다. import re # 탐색할 문자열 sentence = "..