분류 전체보기
-
IT 자격증 정보 - 리눅스 마스터2021.08.03
-
Go Lang 기초 14 - 고 루틴(Go Routine)2021.08.02
-
IT 자격증 정보 - 정보처리기사2021.08.01
-
Go Lang 기초 13 - 인터페이스(interface)2021.07.30
-
Go Lang 기초 12 - 메소드(Method)2021.07.28
IT 자격증 정보 - 리눅스 마스터
리눅스 마스터
1. 개요
리눅스 마스터는 리눅스 기반으로 운영되는 다양한 기반기술의 토대가 되는 자격입니다.
리눅스 운영시스템의 프로그램 사용능력을 평가하는 2급과
리눅스 기반 시스템의 관리능력을 평가하는 1급으로 나뉘어있으며
리눅스 마스터 1, 2급은 국가직무능력표준(NCS) 등을 바탕으로 SW기술자의 체계적 역량 가이드라인 IT분야역량체계(ITSQF)의 IT시스템관리자(L5, L3)로 인정됩니다.
2. 응시자격
응시자격에 제한이 없어 누구나 시험 응시가 가능합니다.
3. 시험과목
등급 | 과목 | 검정항목 | 검정내용 |
1급 | 리눅스 실무의 이해 | 리눅스의 개요 | 운영체제의 개요, 리눅스 기초 |
리눅스 시스템의 이해 | 리눅스와 하드웨어, 리눅스의 구조, X 윈도우, SHELL, 프로세스 | ||
네트워크의 이해 | 네트워크 기초 및 설정 | ||
리눅스 시스템 관리 | 일반 운영관리 | 사용자·파일 시스템·프로세스·S/W 설치 및 관리 | |
장치 관리 | 장치의 설치 및 관리, 주변장치 관리 | ||
시스템 보안 및 관리 | 시스템 분석, 시스템 보안 및 관리, 시스템 백업 | ||
네트워크 및 서비스의 활용 | 네트워크 서비스 | 웹·인증·파일·메일·DNS관리(설치 및 설정), 가상화 관리 및 기타 서비스 | |
네트워크 보안 | 네트워크 침해 유형 및 특징, 대비 및 대처 방안 | ||
2급 | 리눅스 일반 | 리눅스의 이해 | 리눅스의 개요, 역사, 철학 |
리눅스 설치 | 기본 설치 및 유형, 파티션과 파일 시스템, Boot Manager | ||
기본 명령어 | 사용자 생성 및 계정 관리, 디렉터리 및 파일, 기타 명령어 | ||
리눅스 운영 및 관리 | 파일 시스템 관련 명령어 | 권한 및 그룹 설정, 파일 시스템의 관리 | |
Shell | 개념 및 종류, 환경 설정 | ||
프로세스 관리 | 개념 및 유형, 프로세스 Utility | ||
에디터 | 에디터의 종류, 에디터 활용 | ||
소프트웨어 설치 | 개념 및 사용법, 소프트웨어 설치 및 삭제 | ||
장치 설정 | 주변장치 연결 및 설정, 주변장치 활용 | ||
리눅스 활용 | X 윈도 | 개념 및 사용법, X 윈도 활용 | |
인터넷 활용 | 네트워크의 개념, 인터넷 서비스의 종류, 인터넷 서비스의 설정 | ||
응용분야 | 기술동향, 활용기술 |
4. 합격기준
- 1급
- 1차 : 100점 만점 기준, 전과목 평균 60점 이상 + 과목당 40점 이상(과락 시 불합격)
- 2차 : 100점 만점 기준, 60점 이상 - 2급
- 1차 : 100점 만점 기준, 60점 이상
- 2차 : 100점 만점 기준, 전과목 평균 60점 이상 + 과목당 40점 이상(과락 시 불합격)
5. 시험일정
6. 합격률
- 2018년까지의 리눅스 마스터의 합격률은 다음과 같습니다.
연도 | 자격등급 | 응시자 | 취득자 | 합격률 |
2018 | 1급 | 1,444 | 105 | 7.27% |
2급 | 9,690 | 3,000 | 30.96% | |
2017 | 1급 | 1,336 | 350 | 26.2% |
2급 | 8,303 | 2,855 | 34,39% | |
2016 | 1급 | 1,181 | 241 | 20.41% |
2급 | 7,742 | 3,499 | 45.2% |
리눅스 마스터는 1, 2급 모두 연도별 응시자 수가 꾸준히 증가하고 있으며 그에 따라 합격률 자체는 소폭 하락하고 있습니다.
7. 응시수수료와 실시기관 홈페이지
- 자격증 발급수수료 : 5,800원(배송료 포함)
실시기관 : 한국정보통신진흥협회KAIT
8. 코로나19관련 응시제한
이 글을 작성하고 있는 2021년 8월 3일 기준 우리나라 코로나 확진자는 1,202명으로 수도권 및 일부지역은 거리두기 4단계, 대부분의 지역은 거리두기 3단계로 지정되어 있습니다.
리눅스 마스터 2급 1차의 경우 온라인으로 시험을 치르기 때문에 코로나19 방역수칙으로 인한 사회적 거리두기 단계에 영향없이 시험에 자유롭게 응시가 가능합니다.
다만 1급의 1, 2차와 2급 2차의 경우 8개시의 오프라인 시험으로 치러지기 때문에 해당 시험장소가 있는 도시의 사회적 거리두기 단계에 따른 방역수칙이 적용될 것입니다. 자세한 문의는 직접 해보시기를 권장드립니다.
9. 리눅스 마스터 자격증을 취득해야하는 이유?
- (2급에 한해) 시험의 난이도가 낮은 편
2급의 1차는 온라인 시험인데다가 문항수에 비해 시간이 넉넉한 편이고, 2차의 경우에도 다른 IT 자격 시험들에 비해 난이도가 높지 않은 편으로 알려져 있어 취득이 용이합니다. - 학점은행제 인정
리눅스 마스터 1급의 경우 14학점, 2급의 경우 5학점으로 인정됩니다. - 대학교 내 학점, 졸업 인증 혹은 장학금 지급
지정된 일부 대학교의 경우 리눅스 마스터 자격증을 취득한 경우에 학점이나 졸업 인증 그리고 장학금 지급에 반영되고 있습니다.
리눅스 마스터는 현업에서 자주 사용하는 리눅스에 대한 전반적인 이해도를 증명할 수 있는 자격증입니다. 자격증을 취득하는 것에만 중점을 두기보다 실제로 현업에서도 사용할 수 있도록 실제 리눅스 실력을 끌어올린다면 리눅스 마스터 자격증이 소프트웨어 개발에도 큰 날개를 달아주지 않을까 생각해봅니다.
'IT > 자격증 정보' 카테고리의 다른 글
IT 자격증 정보 - 네트워크 관리사 1, 2급 (0) | 2022.02.26 |
---|---|
IT 자격증 정보 - SQLP, SQLD (0) | 2021.09.12 |
IT 자격증 정보 - CCNA, CCNP, CCIE (0) | 2021.08.15 |
IT 자격증 정보 - OCJP, OCAJP, OCPJP (0) | 2021.08.10 |
IT 자격증 정보 - 정보처리기사 (0) | 2021.08.01 |
Go Lang 기초 14 - 고 루틴(Go Routine)
Go Lang에서는 동시에 실행되는 작업을 Go Routine이라고 부릅니다.
다른 프로그래밍언어에서 쓰레드(Thread)라고 부르는 것과 유사한 개념이지만, Go Routine은 OS 쓰레드와 1 대 1로 대응되지 않고 훨씬 적은 OS 쓰레드를 사용합니다. 따라서 한 번에 더 많은 Go Routine을 실행할 수 있습니다.
Go Routine은 사용하기도 매우 간편합니다.
go 함수명()
동시성(Concurrent)은 싱글 코어의 경우에서 스레드를 여러 개 만들어서 마치 동시에 실행되는 것'처럼' 보이도록 하는 것입니다.
병렬성(parallel)은 멀티 코어에서 실제로 나눠서 작업을 동시에 처리하는 것을 말합니다.
동시성을 구현하기 위해 사용되는 개념이 멀티프로세싱과 멀티쓰레딩입니다.
프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이며, 쓰레드는 프로세스가 할당받는 자원을 이용하는 실행의 단위를 말합니다.
동시성을 지원하도록 작성된 프로그램은 여러 작업을 동시에 실행하는 병렬성도 지원할 수 있습니다. 이를 통해 프로그램의 속도를 크게 향상시킬 수 있습니다.
예제. 고 루틴 사용해보기
package main
import (
"fmt"
"time"
)
func printa() {
for i := 0; i < 10; i++ {
fmt.Print("A")
}
}
func printb() {
for i := 0; i < 10; i++ {
fmt.Print("B")
}
}
func printc() {
for i := 0; i < 10; i++ {
fmt.Print("C")
}
}
func main() {
go printa()
go printb()
go printc()
time.Sleep(time.Second)
fmt.Println("\nGo Routine End")
}
출력결과물
BCCCCCCCCCCBABBBBBBBBAAAAAAAAA
Go Routine End
출력결과물이 함수 위치순서대로가 아니라 뒤섞여있는 이유는, Go Routine을 통해 세가지 함수가 동시에 실행되기 때문입니다. 따라서 출력결과물은 실행시킬 때마다 매번 조금씩 다르게 나타나실 겁니다.
CPU를 최대한 활용하려면 runtime.NumCPU()를 사용합니다.
예제. 고 루틴 runtime 활용하기
package main
import (
"fmt"
"runtime"
"time"
)
func printa() {
for i := 0; i < 10; i++ {
fmt.Print("A")
}
}
func printb() {
for i := 0; i < 10; i++ {
fmt.Print("B")
}
}
func printc() {
for i := 0; i < 10; i++ {
fmt.Print("C")
}
}
func main() {
fmt.Println(runtime.NumCPU())
runtime.GOMAXPROCS(runtime.NumCPU())
go printa()
go printb()
go printc()
time.Sleep(time.Second)
fmt.Println("\nGo Routine End")
}
출력결과물
12
AAAAAAAAAABBBBBBBBBBCCCCCCCCCC
Go Routine End
go 1.5 버전 이상부터는 runtime.GOMAXPROCS()를 따로 설정하지 않으면 모든 CPU를 활용하는 것이 기본입니다.
runtime.GOMAXPROCS(4) 등을 통해 활용 CPU의 수를 조절합니다.
'IT > Develop' 카테고리의 다른 글
Go Lang 웹 프레임워크 기초 - Gin 체험하기 (2) 튜토리얼 개요 (0) | 2021.08.20 |
---|---|
Go Lang 웹 프레임워크 기초 - Gin 체험하기 (1) Web Framework 기초 (0) | 2021.08.16 |
Go Lang 기초 13 - 인터페이스(interface) (0) | 2021.07.30 |
Go Lang 기초 12 - 메소드(Method) (0) | 2021.07.28 |
Go Lang 기초 11 - 구조체(Struct) (0) | 2021.07.28 |
IT 자격증 정보 - 정보처리기사
개인적으로 필요해서 정리하는 김에 블로그에 공유해봅니다.
정보처리기사
1. 개요
정보처리기사는 과학기술정보통신부에서 주관, 한국산업인력공단에서 시행하는 소프트웨어 개발 관련 국가자격 시험입니다.
정보시스템의 생명주기 전반에 걸친 프로젝트 업무(계획수립, 분석, 설계, 구현, 시험, 유지보수, 운영) 수행 능력을 검증합니다.
국가직무능력표준(NCS)에 맞춰 2020년 시험부터 난이도 등의 큰 개편이 있었습니다.
- 필기 (과목 전체의 변경)
기존 : 정보시스템 전반 이론
변경 : 소프트웨어 설계, 구축, 활용
- 실기 (과목, 형식은 동일)
기존 : 정보시스템 계획 수립, 업무 및 시스템 분석
변경 : 필기 전 과정을 실무로 작업해볼 수 있도록 구성
정보처리기사는 1년에 3번의 시험이 실시됩니다.
2. 응시자격
- 동일 및 유사 직무분야에서 4년 이상 실무에 종사한 사람
- 4년제 대학 학사 이상 졸업자(혹은 졸업 예정자)
- 고졸, 전문학사의 경우 학점은행제 106학점 이수자
3. 시험과목
정보처리기사의 시험과목은 위에서도 언급한 바와 같이 2020년 1월 1일부터 국가직무능력표준(NCS)를 기반으로 개편 시행되고 있습니다.
- 필기 : 객관식 4지 택일형, 과목당 20문항(30분씩)
- 실기 : 필답형 (2시간 30분)
4. 합격기준
- 필기 : 100점 만점 기준, 전과목 평균 60점 이상 + 과목당 40점 이상(과락 시 불합격)
- 실기 : 100점 만점 기준, 60점 이상
5. 시험일정
다음은 2021년 기준 시험일정입니다. 올해의 3회 시험 접수는 모두 끝났고 접수를 못하셨거나 수험계획중이신 분들은 내년을 목표로 열심히 준비해보도록 합시다!
구분 | 필기원서접수 | 필기시험 | 필기합격 | 실기원서접수 | 실기시험 | 최종발표 |
정기 기사 1회 | 2021.01.25 ~ 2021.01.28 | 2021.03.07 | 2021.03.19 | 2021.03.31 ~ 2021.04.05 | 2021.04.24 ~ 2021.05.07 |
2021.06.02 |
정기 기사 2회 | 2021.04.12 ~ 2021.04.15 | 2021.05.15 | 2021.06.02 | 2021.06.14 ~ 2021.06.17 | 2021.07.10 ~ 2021.07.24 |
2021.08.20 |
정기 기사 3회 | 2021.07.12 ~ 2021.07.15 | 2021.08.14 | 2021.09.01 | 2021.09.13 ~ 2021.09.16 | 2021.10.16 ~ 2021.10.29 |
2021.11.26 |
6. 합격률
시험에서 수험생들이 가장 관심을 가질 수 밖에 없는 것이 합격률입니다.
다만, 정보처리기사는 1977년 시작되어 현재까지 매우 오랜 역사를 가진 시험입니다. 그동안 수험내용과 난이도에 많은 변화가 있었으므로 모든 합격률을 확인하기보다 최근 3개년 정도 수준의 합격률을 확인해보는 것이 합리적일 것입니다.
물론, 2020 이후의 개편이 있었으므로 2020년 합격률만 보는 것도 무방하지 않을까 생각해봅니다.
종목명 | 연도 | 필기응시 | 필기합격 | 합격률 | 실기응시 | 실기합격 | 합격률 |
정보처리기사 | 2020 | 43,279 | 24,820 | 57.3% | 41,457 | 7,341 | 17.7% |
정보처리기사 | 2019 | 52,845 | 30,740 | 58.2% | 43,763 | 22,495 | 51.4% |
정보처리기사 | 2018 | 44,665 | 22,976 | 51.4% | 33,101 | 16,727 | 50.5% |
2020년 개편 이후에 실기 합격률이 그 직전 해인 2019년에 비해 현격하게 줄어든 것을 확인할 수 있습니다.
실기 시험의 경우 특히, 더 준비에 신중을 기할 필요가 있어보입니다.
7. 응시수수료와 실시기관 홈페이지
- 필기 : 19,400원
- 실기 : 22,600원
- 실시기관 : 큐넷(Q-net)
8. 코로나19관련 응시제한
이 글을 작성하고 있는 2021년 8월 1일 기준 우리나라 코로나 확진자는 1,442명으로 수도권 및 일부지역은 거리두기 4단계, 대부분의 지역은 거리두기 3단계로 지정되어 있습니다.
따라서 현재 국가자격 시험의 응시에도 이 코로나19 방역수칙을 엄격하게 적용하고 있습니다. 코로나19 확진자는 연 2회 이상 시행하는 국가자격시험에 응시가 제한되고 있으며 시험 접수 후 확진 판정을 받아 입원치료 중인 수험생의 경우 환불조치를 받고 있으며, 해당하시는 분들께서는 자세한 사항을 실시기관에 직접 문의해보시길 권장드립니다.
9. 정보처리기사 자격증을 취득해야하는 이유?
- 비전공자에게 기본적인 SW 능력에 대한 증빙자료로서의 역할
정보처리기사 자격은 개발자를 준비중이거나 비전공자인 경우 이력서 등을 통해 회사에 본인이 소프트웨어 능력을 어느정도 갖추고 있는지를 대외적으로 증빙해줄 수 있는 공인자격증의 역할을 합니다
- 정부 발주 프로젝트 참여에 필요한 자격요건으로서의 역할
기업에서 정부 발주 프로젝트를 수주하려할 때 일정 수 이상의 정보통신관련 자격증보유자를 필요로 하는 경우에 중요한 역할을 할 것입니다.
- 기업에서 정보처리기사 자격증을 가진 인재를 원하는 경우
IT기업들은 정보통신공사업으로 회사를 신고하려면 일정이상 기술자격증을 가진 인력이 필요한데, 이러한 경우에 자격증이 있는 인재를 채용하기를 원하는 것은 당연할 것입니다.
- 기업에서 해당 자격에 대한 수당을 주는 경우
많은 기업들이 기사자격증을 보유한 직원들에 대해 추가 수당을 지급합니다. 💰
- 투입되는 노력에 비해 괜찮은 아웃풋
2020년 개편으로 인해 난이도가 대폭 상승했다고는 하나 투입되는 노력에 비해서 합격 후의 대우가 괜찮다고 합니다.
정보처리기사 자격증은 수많은 IT 자격증 중 가장 유명하고, 대중적인 자격증 중 하나입니다.
저 또한 이번 정기 시험 3회 필기시험을 접수했고, 응시할 준비를 열심히 하고 있습니다! 이전에 비해 난이도가 많이 올라갔다고 하고, 또 그것이 합격률이라는 지표로 나타나고 있어 걱정되지만 한 번에 꼭 함께 합격하길! 그리고 취득을 고민하거나 계획중이신 분들도 이번 포스트가 큰 도움이 되셨길 바랍니다!
'IT > 자격증 정보' 카테고리의 다른 글
IT 자격증 정보 - 네트워크 관리사 1, 2급 (0) | 2022.02.26 |
---|---|
IT 자격증 정보 - SQLP, SQLD (0) | 2021.09.12 |
IT 자격증 정보 - CCNA, CCNP, CCIE (0) | 2021.08.15 |
IT 자격증 정보 - OCJP, OCAJP, OCPJP (0) | 2021.08.10 |
IT 자격증 정보 - 리눅스 마스터 (0) | 2021.08.03 |
Go Lang 기초 13 - 인터페이스(interface)
인터페이스를 알아보기 앞서 우선 객체지향 프로그래밍(OOP)에 대해 먼저 알아보도록 하겠습니다. 도움이 될 것입니다.
OOP(Object-Oriented Programming)는 프로그램 설계방법론의 하나입니다. 프로그램을 수많은 객체(Object)들로 나누고 이 객체 간의 상호작용을 통해 서술해나가는 방식을 말합니다. 대중적으로 많이 쓰이는 Java, Python, 그리고 Go Lang이 여기에 해당됩니다.
OOP는 유지보수가 쉽고, 코드가 간결해지는 등 많은 장점을 가진 방식이지만,
처리 시간이 오래 걸리고 무엇보다 프로그램 설계 단계부터 꼼꼼하게 생각하고 작성해야 문제가 생기지 않는다는 단점 또한 존재합니다. 알아야할 내용도 많고, 익숙해지는데 많은 시간을 필요로하기도 합니다.
시간이 지날수록 생기는 여러가지 문제점들을 극복해보고자 Beyond OOP라는 단어가 떠오르기 시작했습니다. 기존의 OOP는 Object 중심이므로 클래스의 갯수가 많고, 이를 처음 작성한 사람이 이직하거나 그만두게 되어 다른 개발자가 온다면 구조를 처음 분석하고 파악하는데에도 많은 시간이 필요로 합니다.
실리콘 벨리와 같은 곳에서는 Make Fast, Break things 라는 말이 유행이었다고 합니다. OOP는 잘 짜여진 구조를 설계하는 것이 매우 중요한데, 시간에 쫓기거나 실력의 부족으로 코드가 꼬이게 되면 기술 부채가 쌓이게 됩니다. 그리고 기술 부채가 쌓이게 되면 언젠가는 프로그램이 무너질 수 밖에 없을 것입니다. OOP를 넘어서야 이 Make Fast, Break things를 실현해낼 수 있습니다.
우리는 Go Lang을 통해 Beyond OOP를 실현해내는데 한 발 더 나아가볼 것입니다.
Go Lang의 인터페이스(interface)는 특정 값이 가지고 있기를 기대하는 메소드의 집합, 동작을 수행할 수 있는 타입이 지녀야하는 동작들의 집합입니다.
이 Go Lang에서는 인터페이스를 통한 객체의 상태와 기능을 디커플링(Decupling)시켜 object에 종속되어있던 기능을 종속해제합니다. 디커플링을 통해 기존에 OOP의 단점인, 클래스마다 차지하고 있는 기능들이 메모리를 많이 차지하던 문제에서 효율성을 추구할 수 있게 합니다.
인터페이스의 형태
type 인터페이스명 interface {
메소드명()
메소드명(매개변수타입)
메소드명() 반환값타입
}
인터페이스 정의에 나열된 모든 메소드를 가진 타입은 해당 인터페이스를 만족한다고 합니다. 인터페이스를 만족하는 타입은 해당 인터페이스가 필요한 모든 곳에서 사용할 수 있습니다.
인터페이스를 만족하려면 인터페이스에 정의된 메소드명, 매개변수 타입, 반환값 타입이 모두 일치해야합니다. 인터페이스 정의에 나열된 메소드는 반드시 모두 구현해야하며 하나라도 구현하지 않으면 인터페이스를 만족할 수 없습니다
예제. 인터페이스 만들기
package main
import "fmt"
type SamHero interface { // 삼국지 영웅의 행동 세 가지를 인터페이스로 만들어보겠습니다
Battle() // '전투' 메소드 작성
Diplomacy // 인터페이스도 하나의 타입이므로 인터페이스에 포함시킬 수 있습니다
}
type Diplomacy interface { // '외교' 인터페이스 안에 동맹과 배신을 만들어줍니다
Allay() // '동맹' 메소드 생성
Betray() // '배신' 메소드 생성
}
type Hero struct { // 영웅 구조체를 만듭니다
}
// '전투' 메소드
func (p Hero) Battle() {
fmt.Println("전투를 개시합니다")
}
// '동맹' 메소드
func (p Hero) Allay() {
fmt.Println("동맹을 맺습니다")
}
// '배신' 메소드
func (p Hero) Betray() {
fmt.Println("동맹을 배신합니다")
}
func main() {
var h SamHero // 변수 b 선언을 통해 인터페이스를 사용해줍니다
h = Hero{} // 구조체와 연결합니다
h.Battle() // '전투' 메소드 호출
h.Allay() // '동맹' 메소드 호출
h.Betray() // '배신' 메소드 호출
}
출력결과물
전투를 개시합니다
동맹을 맺습니다
동맹을 배신합니다
인터페이스는 비어있는 상태로도 사용이 가능합니다. 말 그대로 빈 인터페이스(Empty interface)입니다.
var a interface {}
빈 인터페이스는 말 그대로 비어있는 인터페이스이기 때문에 모든 타입의 값을 가질 수 있습니다. 일반적으로는 알 수 없는 값을 처리할 때 사용합니다.
예제. 빈 인터페이스 만들어보기
package main
import "fmt"
func main() {
var a interface{}
fmt.Println(a)
a = 3
fmt.Println(a)
a = "Mandoo"
fmt.Println(a)
}
출력결과물
<nil>
3
Mandoo
'IT > Develop' 카테고리의 다른 글
Go Lang 웹 프레임워크 기초 - Gin 체험하기 (1) Web Framework 기초 (0) | 2021.08.16 |
---|---|
Go Lang 기초 14 - 고 루틴(Go Routine) (0) | 2021.08.02 |
Go Lang 기초 12 - 메소드(Method) (0) | 2021.07.28 |
Go Lang 기초 11 - 구조체(Struct) (0) | 2021.07.28 |
Go Lang 기초 10 - 맵(Map) (0) | 2021.07.28 |
Go Lang 기초 12 - 메소드(Method)
Go Lang의 메소드란 특정한 구조체에 연결되어 호출되는 함수를 의미합니다. 데이터와 코드를 묶어서 응집도를 높이기 위해 사용하는데, 응집도를 높여서 쓰는 것이 유리한 곳에 활용하기에 좋습니다. (통장 입출금 예제 등)
메소드의 형태 (함수와 유사하나 리시버 매개변수 추가 선언 필요)
func (리시버매개변수이름, 리시버매개변수타입) 메소드명() 리턴값 {
구조체 멤버를 접근하여 연산수행 가능
}
메소드를 호출하기 위해서는 메소드를 호출할 값 다음에 . 을 이용하여 메소드를 붙여주면 됩니다. 이 때 메소드를 호출하는 값을 메소드 리시버(method receiver)라고 합니다.
메소드 형태를 참고하면서 다음과 같은 예제를 직접 작성해봅시다.
예제. 메소드 입출금 예제 만들어보기
package main
import "fmt"
type Account string
func (a Account) withdrawMethod() {
fmt.Println("인출 메소드 실행 >", a) // 리시버 매개변수의 값 출력
}
func (a Account) depositMethod() {
fmt.Println("입금 메소드 실행 >", a)
}
func main() {
withdraw := Account("인출이 완료되었습니다")
withdraw.withdrawMethod()
deposit := Account("입금이 완료되었습니다")
deposit.depositMethod()
}
출력결과물
인출 메소드 실행 > 인출이 완료되었습니다
입금 메소드 실행 > 입금이 완료되었습니다
리시버 매개변수의 이름은 원하는대로 사용하셔도 무방하나 하나의 타입에서 정의하는 모든 메서드는 가급적 동일한 리시버 이름을 사용해 가독성을 높이는 것이 좋습니다.
통장 입출금 예제를 사용해서 메소드에 대해 더 자세히 알아보도록 하겠습니다.
예제. 통장 입출금
package main
import "fmt"
type Account struct {
balance int
}
// 인출 함수
func withdrawFunc(a *Account, amount int) {
a.balance -= amount
}
// 인출 메소드
func (a *Account) withdrawMethod(amount int) {
a.balance -= amount
}
func main() {
a := Account{100}
b := Account{200}
// 인출 함수 사용
withdrawFunc(&a, 30)
withdrawFunc(&b, 30)
// 인출 메소드 사용
a.withdrawMethod(40)
b.withdrawMethod(50)
fmt.Printf("%d, %d", a.balance, b.balance)
}
출력결과물
30, 120
메소드와 함수는 모습은 많이 유사하지만 분명한 차이점이 있습니다. 특히 위의 예제에서 인출 함수와 인출 메소드는 큰 차이가 없어보이도록 구성되어 있습니다.
메소드는 리시버 매개변수를 메소드 이름 앞에 작성해주고 호출할때는 리시버를 활용한다는 점에서 함수와의 차이점이 발생합니다.
Go Lang에서는 일반적으로 리시버 이름을 (a Account) 혹은 (d Deposit)과 같이 리시버 타입의 첫 번째 문자를 소문자로 사용합니다.
'IT > Develop' 카테고리의 다른 글
Go Lang 기초 14 - 고 루틴(Go Routine) (0) | 2021.08.02 |
---|---|
Go Lang 기초 13 - 인터페이스(interface) (0) | 2021.07.30 |
Go Lang 기초 11 - 구조체(Struct) (0) | 2021.07.28 |
Go Lang 기초 10 - 맵(Map) (0) | 2021.07.28 |
Go Lang 기초 9 - 슬라이스(Slice) (0) | 2021.07.28 |