
개발 기록

자바에서 equals()와 == 의 차이점
자바에서 프로그래밍을 하다 보면 ==를 쓸 때도 있고, equals() 메서드를 쓰기도 한다. equals()는 메서드 형태이고 ==는 연산자 형태이기에, 형태가 다르다는 사실은 알고 있을 것이다. 이 둘의 기능적 차이는 무엇일까? 바로 주소를 비교하느냐, 대상의 내용 자체를 비교하느냐이다. == 연산자는 대상의 주소값을 비교하여 판단한다. equals() 메서드는 대상의 내용 자체를 비교하여 판단한다. 다음의 예제를 보자. String str1 = "hi"; String str2 = new String("hi"); System.out.println(str1.equals(str2)); // true System.out.println(str1 == str2); // false 여기에서 str1, str2의..

[Spring] 스프링 컨테이너의 생성 | ApplicationContext
스프링 컨테이너와 ApplicationContext // 스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext를 스프링 컨테이너라고 한다. ApplicationContext는 인터페이스다. (위 코드에서 AnnotationConfigApplicationContext는 ApplicationContext의 구현체인 것이다.) 스프링 컨테이너는 XML을 기반으로 만들 수도 있고, 애노테이션 기반의 자바 설정 클래스로도 만들 수 있다. 위 코드가 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것이다. 참고) 더 정확히는 스프..

객체 지향 설계의 5원칙 SOLID | SRP, OCP, LSP, ISP, DIP
좋은 객체 지향 설계를 위해서는 다형성 뿐만 아니라 SOLID도 알아야 한다. 가끔 악덕 면접관들은 이 SOLID가 무엇이냐고 물어보기도 한다. 그럼 대체 이 SOLID는 무엇인가? SRP, OCP, LSP, ISP, DIP의 앞 글자를 딴 것이다. 아직 이해가 안 되는 것이 당연하다. 각각이 뭔지 세세히 알아보자. SRP (Single Responsibility Principle) 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 허나 여기서 하나의 책임이라는 것은 문맥과 상황에 따라 다르므로 객관적으로 평가하는 것이 쉽지 않다. 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것이다. 예를 들어 UI를 변경하는데 SQL 코드부터 서버 전반에 걸쳐 고쳐야 ..

[JAVA] 객체 클래스로 구현
객체 찾기 - 온라인 쇼핑몰에 회원 로그인을 하고 여러 판매자가 판매하고 있는 제품 중 하나를 골라 주문한다 - 아침에 회사 가는 길에 별다방 커피숍에 들러 아이스 카페라떼를 주문했다 - 성적 확인을 위해 학사 관리 시스템에 로그인하여 수강한 과목들의 성적을 확인했다 (학생, 과목, 교수, 강의실, 통계자료, 성적 산출 방법) 클래스는 객체의 청사진(blueprint) - 객체의 속성은 클래스의 멤버 변수(member variable)로 선언 - 학생 클래스 public class Student { int studentNumber; String studentName; int majorCode; String majorName; int grade; } - 주문 클래스 public class Order{ in..
[JAVA] 객체와 객체 지향 프로그래밍
객체 (object) - 의사나 행위가 미치는 대상 (사전적 의미) - 구체적, 추상적 데이터의 단위 (학생, 회원, 생산, 주문, 배송) 객체 지향 프로그래밍과 절차 지향 프로그래밍 - 아침에 일어나 학교를 가는 과정을 예를 들어 봅시다. - 절차 지향 프로그래밍 (C) 시간이나 사건의 흐름에 따른 프로그래밍 일어난다 -> 씻는다 -> 밥을 먹는다 -> 버스를 탄다 -> 요금을 지불한다 -> 학교에 도착 - 객체 지향 프로그래밍 (C++, C#, Python, JavaScript ..) 학생 밥 학생 버스 학생 학교 객체 지향 프로그래밍의 구현 방법 1. 객체 정의 후 2. 각 객체가 제공하는 기능들을 구현하고 3. 각 객체가 제공하는 기능들 간의 소통(메세지 전달)을 통하여 객체 간의 협력 구현

[학교_데이터과학] 데이터의 흩어짐 측정, 산포도, 범위, 사분간위 범위, 분산, 표준편차
산점도 그리기 from google.colab import files uploaded=files.upload() csv_file='2019_03_Daegu_Average_Temperature.csv' import pandas as pd import matplotlib.pyplot as plt # df=pd.read_csv(csv_file) UnicodeDecodeError df=pd.read_csv(csv_file, encoding='cp949') print(df) plt.scatter(range(1,32), df['평균기온(°C)']) plt.show() 범위, 사분위간 범위 나타내기 # 최대, 최소 평균기온 범위 print('범위:', max(df['평균기온(°C)']) - min(df['평균기온(°..

[학교_데이터과학] 대푯값과 중앙값, 최빈값 파이썬으로 구하기
중앙값, 최빈값 중앙값 구하는 함수 : quantile(), median() 최반값 구하는 함수 : mode() (quantile은 사분면을 기반으로 하는데, median보다 더 정확한 계산을 할 때 쓰인다.) google colab에 csv 파일 올리는 방법 1. files.upload() 이용 from google.colab import files files.upload() csv_file='2019_03_Daegu_Average_Temperature.csv' import pandas as pd df=pd.read_csv(csv_file, encoding='cp949') # 한글 인코딩 해주어야 함 print(df.head()) # df = data frame 2. 구글 드라이브에 직접 접근하여 cs..

[학교_데이터과학] 대푯값과 평균 파이썬으로 구하기
대푯값 구하기 데이터가 아주 많다면 이것을 대표하는 값으로 표현해볼 수 있다. 즉, 전체 데이터의 특징이나 경향을 대표할 수 있는 몇 가지 기본적인 통계적 수치를 알아볼 것이다. 보통 데이터의 양 끝단, 최대값, 최소값보다는 데이터의 중심이 그 데이터를 설명하는 데 더 유용할 것이다. 평균 한국의 남자 키를 누군가가 물었다면 대답할 때 약 2500만명의 남자 키를 모두 말하기는 어렵다. 이때 평균 키를 말하면 대략적인 남자 키를 말했다고 할 수 있을 것이다. data=[1, 2, 3, 4, 5] print(sum(data)) print(len(data)) 수학과 통계에서 산술 평균(算術平均, arithmetic mean)은 주어진 수의 합을 수의 개수로 나눈 값이다. data=[1, 2, 3, 4, 5]..

[MySQL] SELECT, FROM, WHERE 자세히 알아보기
응용 프로그램 개발자는 SELECT/INSERT/UPDATE/DELETE 를 잘 사용하는 것이 중요하다. SELECT문 : 데이터베이스 내의 테이블에서 원하는 정보를 추출하는 명령. 가장 많이 사용하는 SQL 구문이다. SELECT문의 기본 형식은 아래와 같다. SELECT select_expr [FROM table_references] [GROUP BY {col_name | expr | position}] [HAVING where_condition] [ORDER BY {col_name | expr | position}] USE 구문 SELECT문을 사용하려면 먼저 사용할 데이터베이스를 지정해야 한다. 현재 사용하는 데이터베이스를 지정 또는 변경하는 구문 형식은 아래와 같다. USE 데이터베이스_이름; ..

[C 자료구조] 연결 리스트 개념 쉽게 이해하기 | Easier LINKED LIST | C언어
Requires : C언어 기본 문법(Syntax), 포인터(Pointer), 구조체(Struct), 동적 할당(Dynamic allocation) 이 포스팅 내용은 C언어 기반으로 쓰여졌으며, C언어 기본 문법과 포인터, 구조체, 동적할당을 이해하고 있다는 가정 하에 설명합니다. 만약 위에서 언급한 개념들과 기본 문법이 익숙치 않으시다면, 그것들을 먼저 학습하시는 것을 권장드립니다. 우리는 프로그래밍 언어를 배우면서, 배열(Array)를 배워왔다. 배열은 쉽게 말해서, 같은 자료형을 가진 변수들의 묶음이다. 같은 자료형이고, 같은 용도로 쓸 것인데 각각의 변수로 모두 따로 선언하면 복잡하기 때문이다. 이러한 배열만 해도 당시에는 아주 혁명적인 아이디어였을 것이다. 하지만 우리는 점점 더 멋진 프로그램을..

[C언어] call by value, call by reference | 값에 의한 호출, 참조에 의한 호출
call by value : 값에 의한 호출 call by reference : 참조에 의한 호출 값에 의한 호출은 함수에 주는 값(인자)이 다른 변수에 그대로 복사되는 것이고, 참조에 의한 호출은 함수에 주는 값(인자)의 주소를 매개변수로 받는 것이다. 아래 예제를 보자. #include void swap1(int a, int b) // call by value (값만 넘겨줌.) { int t = a; a = b; b = t; } void swap2(int* a, int* b) // call by reference (주소를 넘겨줌.) { int t = *a; *a = *b; *b = t; } int main() { int n1 = 5, n2 = 7; printf("n1 = %d, n2 = %d\n", ..

[C언어] 메모리 구조 | 힙 영역과 스택 영역
프로그램이 실행되기 위해 프로그램과 안의 변수들이 메모리에 로드되어야 한다. 따라서 컴퓨터의 운영체제는 위와 같이 다양한 메모리 공간을 제공한다. 프로그램이 운영체제로부터 할당받는 메모리 공간을 알아보자. 코드(code) 영역 실행할 프로그램의 코드가 저장되는 영역이고, 텍스트 영역이라고도 부른다. CPU는 코드의 명령어를 하나씩 가져가서 처리한다. 데이터(data) 영역 프로그램의 전역 변수와 정적 변수(static)가 저장되는 공간이다. 이 영역은 프로그램의 시작과 함께 할당되고, 프로그램이 종료되면 소멸한다. 스택(stack) 영역 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 곳. ( 함수의 매개 변수, 함수 호출이 끝난 뒤 돌아갈 반환 주소값, 함수에서 선언된 지역변수 등 ) 이 영역은..

[C언어] extern 알아보기 | 소스 파일 분리
extern을 영어사전에서 찾아보면 , 외래 의사라고 나와 있다. C언어 프로그래밍에서는 extern을 이용해 다른 소스에 있는 변수와 함수를 갖다 쓸 수 있다. extern 자료형 전역변수명; extern 반환값자료형 함수이름(매개변수자료형) 이런 식으로 사용할 수 있다. (위의 형식은 변수를 불러올때, 아래의 형식은 함수를 불러올 때) [main.c] #include int i = 7; extern void func1(); int main() { int i = 5; func1(); i++; printf("i=%d\n", i); } [main1.c] #include extern int i; void func1(); void func2(); void func1() { i++; printf("extern ..

[JAVA] 객체 지향 프로그래밍이란? | OOP
국어 사전에서는 객체가 위 사진처럼 '의사나 행위가 미치는 대상'이라고 나온다. 우리 주위에는 사람, 노트북, 버스 등의 객체가 있다. (눈에 보이지 않는 것도 객체가 될 수 있다. 예를 들어 주문, 생산, 관리 등) 객체 지향 프로그래밍은 OOP(Objected-Oriented Programming)이라고도 하며, 객체를 기반으로 프로그램을 짜는 것이다. 즉, 어떤 대상을 가지고 프로그래밍하는 것이다. 자바는 이러한 객체 지향 언어이다. 아래에서 더 자세히 살펴보자. 우리는 아침에 일어나 학교에 가기까지 여러 일을 한다. 침대에서 일어난 후, 씻고, 밥을 먹고, 걸어서(혹은 버스나 차를 타고) 학교에 도착한 후 수업을 준비한다. 이런 식으로 '순서대로 일어나는 일을 시간 순으로 프로그래밍하는 것'을 '..