목록Programing (20)
Study Memory Work
인터페이스 객체의 동작을 표현, 골격 단순히 동작에 대한 방법만 표기 추상화 제공 인터페이스의 메소드를 구현한 타입은 이터페이스로 사용 가능 Go 언어를 유연하게 사용 가능 덕타이핑 : Go언어의 독창적인 특성 인터페이스를 왜 사용하는지?? -> 자바의(전략패턴, 템플릿메소드, 팩토리메소드패턴, 어댑터패턴 .....) 디자인 패턴 측면에서볼 때, 메소드를 호출하는 클라이언트 입장에서 사용하는 메소드의 구체적인 클래스를 몰라도 인터페이스에 정의된 메소드를 사용하는 객체 보장. 클래스의 수정이 일어나도 메소드를 따로 수정할 필요 없음. ==> 클래스 간의 결합도를 낮춰줌 -> 유지보수 용이, 추가개발 용이, 독립적인 프로그래밍 가능 인터페이스 선언 기본 type 인터페이스명 interface { 메소드1()..
구조체 임베디드 패턴 Go에는 상속 개념이 없는 대신 상속과 같은 기능을 하도록 하는 활용 패턴 A 구조체와 B구조체가 있고, B구조체가 A구조체를 필드로 가진 경우 --> A구조체 관련 리시버메소드까지 B구조체에서 구현이 가능하다. package main import "fmt" // 사원 type Employee struct { name string salary float64 bonus float64 } // 임원 -------------------> 사원 구조체를 필드로 가지고 있음 type Excutives struct { Employee // ---> "is a 관계" specialBonus float64 } // 급여 func (e Employee) Calaulate() float64 { ret..
구조체 생성자 패턴 인스턴스 선언과 동시에 값을 초기화 하는 것 ---> 생성자 패턴을 이용한 것임 type account struct { number string balance float64 interest float64 } func main() { // 선언과 동시에 값 초기화 kim := account{number: "234-123", balance: 10000000, interest: 0.014} fmt.Println(kim) } 포인터형 구조체 생성자 패턴 만들기 포인터형의 구조체 인터페이스는 선언과 동시에 값 복사가 되지 않는다. 반드시 아래와 같은 형식을 취해줘야 함. ---> 생성자 패턴을 이용할 수 없는 것임. var lee *account = new(account) 생성자 패턴 처럼 만..
구조체 Go에서 필드들의 집합체, 또는 컨테이너를 구조체라 한다. 구조체는 필드는 갖지만 메소드는 갖지 않는다. 객체지향 방식을 지원한다. -> 리시버를 통해 구조체와 메소드를 연결 상속, 객체, 클래스 개념 없음 // 구조체 선언 type Account struct { number string balance float64 // 잔액 interest float64 //이자 } // 리시버를 이요해 메소드와 구조체 연결 func (a Account) Calculate() float64 { return a.balance + (a.balance * a.interest) } func main() { // 인스턴스 생성1 kim := Account{number: "123-456", balance: 10000000..
Go는 객체 지향 타입을 구조체로 정의한다. (클래스, 상속 개념이 없음) Go는 전형적인 객체지향의 특징을 가지고 있지는 않지만 인터페이스 등을 통한 다형성 지원, 구조체를 통한 클래스형태의 코딩이 가능하도록 이루어져 있다. ( Go는 객체지향 프로그래밍 이다.) 객체지향 활용 첫번째 : 구조체 클래스 없이 상태, 메소드를 분리해서 정의한다 (결합성 없음) 구조체와 메소드를 연결하여 타 언어의 클래스 형식처럼 사용 가능하다(객체지향) 사용자 정의 타입 : 구조체, 인터페이스, 기본 타입(int, float, string ...), 함수 사용자 정의 구조체 구조체 // 사용자 정의 구조체 type Car struct { name string color string price int tax int } 일반..
파일 읽기 Read Open > file size 추출 > file.read package main import ( "fmt" "os" ) func errCheck1(e error) { if e != nil { panic(e) } } func errCheck2(e error) { if e != nil { fmt.Println(e) return } } func main() { // 파일 읽기 예제1 file, err := os.Open("fileIO/test_read.txt") errCheck1(err) fileInfo, err := file.Stat() // 파일 정보들. errCheck2(err) fd1 := make([]byte, fileInfo.Size()) // 파일사이즈만큼의 byte 배결 생성..