Ch 17) 메서드
·
dev./golang
이번 포스팅은 Go 언어의 메서드에 알아보려고 한다.17.1 메서드 선언메서드를 선언하려면 리시버를 func 키워드와 함께 사용한다.func (r Rabbit) info() int { return r.width * r.heigth}r Rabbit: 리시버info(): 함수 이름리시버를 통해 메서드의 타입을 알 수 있고, 구조체(r)는 매개변수처럼 사용이 가능하다. 리시버로 모든 로컬 타입이 가능한데 여기서 로컬 타입은 해당 패키지 안에서 type 키워드로 선언된 타입을 의미한다.package mainimport "fmt"type account struct { balance int}// 일반 함수func withdrawFunc(a *account, amount int) { a.balan..
Ch16) Slice
·
dev./golang
16.1 슬라이스슬라이스를 선언하고 요소에 접근, 순회, 추가하는 방법을 알아보자. 16.1.1 슬라이스 선언var array [10]int위 코드는 고정길이 10을 가지고 있는 배열을 나타낸 코드이다. 선언된 길이보다 더 많은 값을 저장하기 위해서는 어떻게 해야 할까? 별도 저장공간을 할당한 뒤 기존의 값을 새로운 공간에 복사하는 방식을 사용해야 한다. 이러한 배열의 불편함을 해소해 줄 수 있는 게 슬라이스이다. 슬라이스는 동적 배열을 다루는 데 다양한 방법을 제공해 주고 있다. var slice []int위와 같이 슬라이스를 만들자. 슬라이스를 초기화 하지 않으면 길이가 0인 슬라이스가 만들어 진다. 크기가 0인 슬라이스에 값을 추가하게 되면 Panic 에러가 발생하고 프로그램은 종료된다. Panic..
Ch27) 프로파일링으로 성능 개선 하기
·
dev./golang
프로파일링이란? 프로그램의 성능 지표를 프로그램이 실행 중에 실시간으로 측정하고 기록하는 것을 말한다. 측정하는 성능 지표는 실행 시간, 메모리 사용량, 함수 호출 시간과 빈도등이 있다. 프로그램 성능이 저하되는 곳을 찾고 원인을 분석하는 데 주목적이 있다.27.1 특정 구간 프로파일링Go 언어에서 프로파일링 데이터를 수집하는 방법이 몇 가지 있는데, 그중에서 특정 구간을 프로파일링 하는 방법을 살펴보자. 이 방법은 성능 개선이 필요한 특정 함수나 구간을 조사할 때 좋은 방법이다.성능 측정을 시작하는 곳에 pprof.StartCPUProfile() 함수를 호출성능 측정을 끝내는 곳에 pprof.StopCPUProfile() 함수를 호출결과 저장package mainimport ( "fmt" "log..
(아이템 5) 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
·
dev./Effective-Java
Effective Java 3판 아이템5 의존 객체 주입에 관한 내용이다. 책에서 소개한 SpellChecker 라는 클래스를 사용한다. | 하나의 클래스가 하나 이상의 자원에 의존하는 경우 [ 정적 유틸리티 클래스 구현 (아이템4) ] 맞춤법 검사기 (SpellChecker)는 사전(Dictionary)에 의존하고 있는 객체의 관계를 아래 예제와 같이 정적 유틸리티 클래스로 구현할 수 있다.public class SpellChecker { // dictionary 객체가 고정됨 -> 변경이 어렵다. private static final Lexicon dictionary = new KoreanDictionary(); private SpellChecker() { // 객체 생성..
(아이템 4) 인스턴스화를 막으려거든 private 생성자를 사용하라
·
dev./Effective-Java
이번 포스팅은 Effective-java 3판 아이템 4에 관한 내용이며, Private 생성자에 대한 내용입니다. 책의 내용을 기반으로 작성되었지만 잘못된 부분이 있다면 댓글로 부탁드립니다.1. 인스턴스화를 막는 방법final 클래스final 클래스는 인스턴스화가 되지 않을 뿐 아니라 상속도 지원하지 않는다. 따라서 final 클래스로 만들어진 클래스는 인스턴스화를 할 수 없게 된다. public final class UtilityFinalClass { public static void print() { System.out.println("final class print()"); } /* 불가능 static class AnotherClass extends Utilit..
자바 타입 캐스팅
·
dev./Java
이번 포스팅은 [Baeldung] 사이트에서 자바 타입 캐스팅에 관한 글을 번역한 내용입니다. 오역과 의역이 있으니 읽으실 때 참고 부탁드립니다. (https://www.baeldung.com/java-type-casting)1. Overview자바의 타입은 원시형(Primitives)과 참조형(References) 이렇게 2가지 종류로 구성되어 있다. 우리는 원시형 타입에 대해서는 다른 글에서 다루었고, 이번 글에서는 참조형 캐스팅을 다룰 예정이다.2. 원시형(Primitives) vs 참조형(References)[원시 타입 변환(Primitive conversions]과 [참조형 변수 캐스팅(Reference variable casting]은 어떻게 보면 비슷할지 모르겠지만, 두 개의 개념은 다르다...