전체 글 88

[Go] 12. Go(golang)의 메소드(method)

이전 공부에서 golang의 구조체에 대해서 정리를 했었다. 오늘 정리할 내용은 구조체의 메소드에 관한 내용이다. 메소드 객체지향 언어에서 특정 속성들의 기능을 수행하기 위해 만들어진 특별한 함수를 "메소드"라고 한다. Go 언어는 객체지향 언어이지만 필드와 메소드를 묶어서 정의하는 클래스가 없다. Go 언어에서 메소드를 구조체 내부에서 정의하지 않고 구조체 밖에 일반 함수처럼 별도로 선언한다. Go언어의 메소드 Go언어에서 메소드를 선언하는 문법은 일반 함수를 선언하는 문법과 차이가 있다. - 기본 함수 선언 문법 func 함수 이름(매개변수 이름 매개변수형) 반환 형{ ` ` ` - 메소드 선언 문법 func (매개변수이름 구조체 이름) 메소드 이름() 반환형 { ` ` ` 메소드에서도 기본 함수에서..

[Go] 11. Go(golang)의 구조체(struct)

이전 공부에서 golang의 익명 함수에 대해서 정리를 했었다. 오늘 정리할 내용은 구조체에 관한 내용이다. 요즘 준비할 게 많아서 설명은 주석으로 대체하겠다. 구조체 관련 코드 및 설명 package main import "fmt" type student struct { name string age int phone string } type test struct { num int } func callByreference(t *test) { t.num += 10 } func callByvalue(t test) { t.num += 10 } func main() { var stu1 = student{} fmt.Println(stu1) //구조체에 멤버변수가 0으로 초기화되어있지 않기 때문에 "{ 0 }"이 ..

[백준] 1717번 집합의 표현 Python 해설

출처 : https://www.acmicpc.net/problem/1717 1717번: 집합의 표현 첫째 줄에 n(1≤n≤1,000,000), m(1≤m≤100,000)이 주어진다. m은 입력으로 주어지는 연산의 개수이다. 다음 m개의 줄에는 각각의 연산이 주어진다. 합집합은 0 a b의 형태로 입력이 주어진다. 이는 a가 포함되어 있는 집합과, b가 포함되어 있는 집합을 합친다는 의미이다. 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산은 1 a b의 형태로 입력이 주어진다. 이는 a와 b가 같은 집합에 포함되어 있는지를 확인하는 연산이다. a www.acmicpc.net Disjoint-set 알고리즘으로 분류된 문제이다. N사에 떨어졌다고 생각하고 K사 채용연계형 인턴 정형의 코딩 테스트를 ..

[Python] 파이썬 멀티 스레드 채팅 서버 만들기 - 2

기본 코드에 조금 더 살을 붙여서 CLI환경에서 단채 채팅방 환경을 구축했다. 아직 최적화시킬 부분도 남았고, slack처럼 늦게 들어와도 채팅방의 기록을 볼 수 있게 구축하고 싶기 때문에 시간이 남으면 세 번째 작업도 진행할 예정이다. 서버 코드 import socket import argparse import threading import time host = "127.0.0.1" port = 4000 user_list = {} notice_flag = 0 def msg_func(msg): print(msg) for con in user_list.values(): try: con.send(msg.encode('utf-8')) except: print("연결이 비 정상적으로 종료된 소켓 발견") def..

[Python] 파이썬 멀티 스레드 채팅 서버 만들기 - 1

N사 최종 면접 후 멀티 스레드에 대한 이론은 있지만 실전에 약하다는 느낌을 받았다. 아무래도 멀티 스레드 환경에서 프로그래밍을 할 경험이 없어서 더 그런 것 같다. 그! 래! 서! 혼자서라도 멀티 스레드 채팅 서버를 구축해보는 프로젝트를 진행하려고 한다. 기본 코드 Python 게시판에 올려두었던 서버, 클라이언트 코드를 조금 변조해서 뼈대가 될 코드를 작성하였다. - 서버 코드 import socket import argparse import threading import time host = "127.0.0.1" port = 4000 user_list = {} notice_flag = 0 def handle_receive(client_socket, addr, user): while 1: data =..

[백준] 11003번 최솟값 찾기 Python 해설

출처 : https://www.acmicpc.net/problem/11003 11003번: 최솟값 찾기 N개의 수 A1, A2, ..., AN과 L이 주어진다. Di = Ai-L+1 ~ Ai 중의 최솟값이라고 할 때, D에 저장된 수를 출력하는 프로그램을 작성하시오. 이때, i ≤ 0 인 Ai는 무시하고 D를 구해야 한다. www.acmicpc.net 슬라이딩 윈도우 알고리즘으로 분류된 문제이다. 열몇 번의 시도만에 풀었다.. 풀이 - Python 정답 코드 from collections import deque n, l = map(int, input().split()) arr = [*map(int, input().split())] m = deque() for i in range(n): tmp = arr[..

[백준] 10868번 최솟값 Python 해설

출처 : https://www.acmicpc.net/problem/10868 10868번: 최솟값 N(1 ≤ N ≤ 100,000)개의 정수들이 있을 때, a번째 정수부터 b번째 정수까지 중에서 제일 작은 정수를 찾는 것은 어려운 일이 아니다. 하지만 이와 같은 a, b의 쌍이 M(1 ≤ M ≤ 100,000)개 주어졌을 때는 어려운 문제가 된다. 이 문제를 해결해 보자. 여기서 a번째라는 것은 입력되는 순서로 a번째라는 이야기이다. 예를 들어 a=1, b=3이라면 입력된 순서대로 1번, 2번, 3번 정수 중에서 최솟값을 찾아야 한다. 각각의 정수들은 www.acmicpc.net 세그먼트 트리에 입문하기 위해 딱 좋은 문제라고 생각한다. 풀이 - Python 정답 코드 import sys from mat..

[Python] 멀티 스레드 소켓 서버 구축하기

내가 한 번도 경험하지 못했던 "멀티 스레드 서버 프로그래밍"을 시작하기에 앞서 뼈대가 될 코드를 만들었다. 서버 코드 import socket import argparse import threading import time host = "127.0.0.1" port = 4000 def handle_client(client_socket, addr): print("접속한 클라이언트의 주소 입니다. : ", addr) user = client_socket.recv(1024) string = "안녕하세요? %s 님"%user.decode() client_socket.sendall(string.encode()) print("1초 후 클라이언트가 종료됩니다.") time.sleep(1) client_socket...

[Python] 파이썬 소켓 서버 프로그래밍

나는 개발자가 되기에 아직 많이 부족하다는 것을 느끼고 조금 더 열심히 살기로 다짐했다. 오늘은 파이썬으로 에코 서버를 TCP타입 소켓 통신을 통해 만들었다. 코드와 함께 간단한 주석으로 설명을 대체할 것이다. 사실 진짜 만들고 싶었던 건 내가 계속되는 질문에도 답을 못 했었던 스레드를 이용한 서버이다. 이번 건 맛 보기라는 뜻이다! 서버 코드 import socket host = "127.0.0.1" port = 9123 #IPv4 체계, TCP 타입 소켓 객체를 생성 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #포트를 사용 중 일때 에러를 해결하기 위한 구문 server_socket.setsockopt(socket.SOL_SO..

[Thread] 스레드란 무엇인가 (vs 프로세스)

스레드의 정의 스레드의 정의는 "프로세스 내에서 실행되는 여러 흐름의 단위"이다. *프로세스에 대해 잘 모른다면 여기를 참고 스레드의 특징 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다. 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다. 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드도 그 변경 결과를 즉시 볼 수 있다. 각각의 스레드는 별도의 레지스터와 스택을 가지고 있다. 스레드의 종류 스레드를 지원하는 주체에 따라 2가지로 나눌 수 있다. 사용자 레벨 스레드 (User-Level Thread) 사용자 스레드는 커널 영역의 상위에서 지원..