'분류 전체보기'에 해당되는 글 255건

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Easy UO 로 자원채집 할 때, 

 

맨 처음 위치에서 가만히 있을 때가 있다.. 

 

주로 컴터교체 후 울온을 새로 깔거나 할때 발생하는데 

 

Mul 파일이 없어서 그런거니, mul 파일을 받아주면 된다. 

 

https://mega.nz/file/1NI0lTzS#lXcJSe3HkP5xN9tMroqp00kxk-oQ5fsScemaRLgP-v0

블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

아래 코드를 보자. 

let total = 0;
let item = [
    {name : '새우깡', price: 100},
    {name : '고래밥', price: 200},
    {name : '꼬북칩', price: 300},
    {name : '하이트맥주', price: 400},
];

const addItem = (name, price) => {
    item.push({
        name : name,
        price : price
    });
}


addItem('땅콩', 400);

이전 글과 같은 이유로, addItem 은 액션이다. 

 - 암묵적 입/출력이 존재

 - 실행 시점 및 횟수에 영향을 받음

 

위를 "계산" 으로 바꾸려면 

 - 암묵적 입/출력을 명시적 입/출력으로 변경 

 - 실행 시점 및 횟수에 영향이 없도록 변경 

 

이전 글 처럼, 먼저 암묵적 입/출력을 명시적 입/출력으로 바꿔보면

let total = 0;
let item = [
    {name : '새우깡', price: 100},
    {name : '고래밥', price: 200},
    {name : '꼬북칩', price: 300},
    {name : '하이트맥주', price: 400},
];

const addItemCalc = (items, name, price) => {
    items.push({
        name : name,
        price : price
    });
    
    return items;
}

item = addItemCalc(item, '땅콩', 400);

console.log(item);

 명시적 입/출력으로 변경하였다. 암묵적 입/출력 문제가 사라진 듯 하지만, 암묵적 출력 문제는 존재한다.  

문제는 items 파라미터는 '참조' 로 전달이 되기 때문에, 함수 내 변경사항이 원본에 적용이 된다.

// items 파라미터는 참조로 전달된다, 즉 items 에 뭔가를 추가한다면,
// 파라미터로 전달된 원본도 같이 변경된다. 
// return 값이 존재하지만, 암묵적 출력은 여전히 남아있다.
const addItemCalc = (items, name, price) => {
    items.push({
        name : name,
        price : price
    });
    
    return items;
}

함수의 실행이, 함수 외부의 변수와 '완벽하게' 차단된다면 부수효과(side effect) 억제효과도 있고, 그만큼 테스트와 유지보수 용이성도 증가할 것이다. 

해결방법 중 하나는 '복사본 리턴' 이다. 

 

const addItemCalc = (items, name, price) => {
    let result = items.slice(); //여기서 복사본을 만든다.
    result.push({
        name : name,
        price : price
    });
    
    return result;
}

복사본을 만든 후, 배열을 변경 하고, 그 후에 변경된 배열을 리턴한다. 

 

위와같이 구현하면, 큰 자료구조라 하더라도, 조작 시, 로직과 데이터를 완벽하게 분리 해낼 수 있다. 

 

결론

동작을 계산으로 바꾸는 첫번째 방법 - 변경시에는 복사본을 사용하고 변경된 데이터를 리턴하라.

 

추가

- 객체 복사 시 성능 이슈가 있을 것이라 생각되는 분이 많을 듯 하다. 자바스크립트에서는 복사 시 기본적으로 얕은복사를 사용하고, 깊은 복사는 loadsh 등의 라이브러리를 사용하여 처리한다. 성능상의 이슈는 그리 크지 않은것으로 보이며, 필요할 경우에만 깊은 복사를 사용하면, 발생할 수 있는 성능상의 이슈를 줄일 수 있을 것이다. 

  참고 : https://jess2.xyz/JavaScript/copy/

블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

아래 코드를 보자, 동작(Action) 이 있는 코드다.

let total = 0;
let item = [
    {name : '새우깡', price: 100},
    {name : '고래밥', price: 200},
    {name : '꼬북칩', price: 300},
    {name : '하이트맥주', price: 400},
];

const getTotalAmount = () => {
    for(let i = 0; i < 4; i++) {
        total += item[i].price;
    }
    console.log(`total: ${total}`)
};


getTotalAmount();

getTotalAmount 는 total에 item 배열의 price 값을 모두 더하는 간단한 함수.

 

위 코드에서 getTotalAmount 의 특징은 

1. 암묵적인 입/출력이 있다. 

  - 암묵적 입력 : item

  - 암묵적 출력 : total

2. 실행 횟수와 시점에 영향을 받는다. 

  - getTotalAmount 를 두번 호출한다면 item 배열의 요소를 두번 순회, total 값은 2000 이 된다. 

 

때문에, getTotalAmount 는 '동작' 이고, getTotalAmount 의 유지보수 및 테스트를 위해서는 코드 전체를 확인한 후, 

item 과 total 의 값 변경에 신경쓰며 작업해야한다.

작은 프로젝트에서야 저렇게 하는게 빠르고, 신경쓸 부분도 적기 때문에 상관이 없지만, 

프로젝트가 증가하고, 같이 일할 사람들이 생길수록 저런 부분은 복잡성을 증가시키고, 여러 개발자들이 같은 작업을 계속하게된다.

(암묵적 입/출력 분석 및 상태 변경 처리 등...)

 

위 코드에서 암묵적 입/출력을 명시적 입/출력으로만 변경하여도, 유지보수 시 작업의 복잡도를 줄일 수 있다.

//getTotalAmountCalc 의 계산버전
const getTotalAmountCalc = (itemList) => {
    let result = 0;
    for(let i = 0; i < 4; i++) {
        result += itemList[i].price;
    }
    return result;    
}

getTotalAmountCalc 함수가 갖는 특징 

1. 명시적인 입/출력이 생김 

  - 입력: itemList

  - 출력: result 

2. 실행 횟수와 시점의 영향을 받지 않음 

  - 100 번을 실행해도 itemList 가 같으면 항상 같은 값이 출력됨 

 

위 1,2 번의 특징으로 인해 갖는 장점 

1. 코드 테스트 부하가 상대적으로 감소 

  - 입력값에만 영향을 받으므로, 개발자가 원하는 특정 상황에서 테스트 가능

2. 유지보수 시 공수 감소 

  - 문서에는 '입력' 과 '출력' 타입 및 동작만 기술하면, 이후 개발자는 입출력만 신경써서 개발하면 된다.

    (정 못믿겠으면, 개발 전에 테스트용 입력값 갖고 테스트만 하면됨.)

 

위 1,2 번의 특징으로 인해 갖는 단점 

1. 코드량 증가 

  - 함수 첫부분 선언코드, 마지막의 return 코드 

2. 메모리 추가사용 

  - 함수 안의 지역변수 선언, 지금은 작은 사이즈라 상관없지만, 크기가 자꾸 커지면???

 

단점이 없지는 않지만, 향후 정리할 '얕은 복사' 와 '방어적 복사' 등을 사용하고, 

요즘 GC 들은 많은 부분에서 최적화가 이루어지고 있기 때문에, 기가바이트 급의 대용량이 아니라면, 

저 단점들은 '투자' 의 개념으로 생각하는게 좋지 않을까 한다. 

 

결론

동작을 계산으로 바꾸는 첫번째 방법 - 입/출력을 명시적으로 선언하라

  => 비지역 변수 read 는 함수의 파라미터로, 비지역변수 write 는 함수의 리턴값으로 바꿀 것.

 

블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

코드는 세가지 종류로 구분할 수 있다.

 

1. 동작(Action) 

  - 실행 시간과 횟수에 영향을 받음

  - 같은 코드라 해도, 나오는 결과가 다를 수 있다. 

  - ex) 메일을 보내는 코드, DB 에 기록하는 코드

  - 명시적 입/출력(함수 파라미터, 리턴값)과 암묵적 입/출력이(전역변수, 객체변수 등의 비지역변수) 섞여있음

 

2. 계산(Calculation)

  - 입/출력이 모두 명시적입 

  - 출력값은 입력값에 대해서만 영향을 받음

  - 입력값이 같으면 항상 같은 값을 출력함

 

3. 데이터 

  - 이벤트 실행의 결과, 

  - 우리가 흔히 아는 변수(리스트, 값 등...)

 

소프트웨어 개발에서 '액션' 이 갖는 특징 

1. 구현 / 설계가 상대적으로 용이함 

  - C/C++, JAVA 구현하듯이 절차적으로 구현하면 됨 

2. 유지보수 및 테스트의 어려움 

  - 소프트웨어 규모가 증가할수록 많은 암묵적 입력이 존재(복잡성이 증가함) 

  - 테스트 자동화 진행 시, 모든 암묵적 입력값을 설정해줘야 함.

 

소프트웨어 개발에서 '계산' 이 갖는 특징 

1. 구현의 상대적인 까다로움

  - 초반 적응의 어려움 (방어적 복사 등... )

2. 유지보수 및 테스트의 상대적인 용이함 

  - 입력값이 같으면 출력값 또한 같다. (-> 유닛 테스트 용이)

 

때문에, 소프트웨어 개발 시, '액션' 의 갯수는 최소화하고, 가능하면 '계산' 을 사용하는게

유지보수에 편할 수 있음.

 

블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

이지유오 매크로 사용 시, 

처음부분을 잘 읽어보면 2fc 6fcr is must 라고 나온다.

빠른주문시전을 2로, 

빠른 주문회복을 6으로 반드시 맞추라는 소리 같은데

 

쉽게 설명하면 아래 스샷에서 붉은 원 안의 값을 스샷의 값으로 맞추라는 소리다. 

아래부분은 6만 맞춰도 된다. 

돌려본 결과 아주 잘돌아간다.

이지유오 매크로 파일은 아래에 있다. 

 

 

Bard Mastery Master Trainer v2.11.txt
0.03MB

'생활 > 울티마 온라인' 카테고리의 다른 글

Easy UO 멈출 때  (0) 2023.09.19
[EasyUO]울티마온라인 테일러링 tailoring 매크로  (0) 2021.02.22
블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

기존의 스크립트는 cutter 가 동작하지 않아 그 문제가

CEOTurboTailor2-수정본.txt
0.12MB

수정된 버전.

 

'생활 > 울티마 온라인' 카테고리의 다른 글

Easy UO 멈출 때  (0) 2023.09.19
[울티마온라인] 불협화음 (Discordance) 매크로  (0) 2021.08.31
블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Akka 코딩 공작소 예제중에

 

ScalaTest 3.2.0 과는 다른 부분이 있어 기록해둠.

 

원래 코드는 아래와 같다.

import org.scalatest.{WordSpecLike, MustMatchers}
import akka.testkit.TestKit
import akka.actor._

//This test is ignored in the BookBuild, it's added to the defaultExcludedNames

class SilentActor01Test extends TestKit(ActorSystem("testsystem"))
  with WordSpecLike
  with MustMatchers
  with StopSystemAfterAll {
  // Commented to make the travis build pass, this is the original test in the book
  "A Silent Actor" must {
    "change state when it receives a message, single threaded" in {
      //Write the test, first fail
      fail("not implemented yet")
    }
    
    "change state when it receives a message, multi-threaded" in {
      //Write the test, first fail
      fail("not implemented yet")
    }
  }
}

 

ScalaTest 3.2.0 에서는 객체들 이름이 변경되었다, 자세한 내용은 아래 링크를 참고바란다.

 

www.scalatest.org/release_notes/3.2.0

 

ScalaTest

ScalaTest/Scalactic 3.2.0 Release Notes ScalaTest/Scalactic 3.2.0 (for Scala 2.10, 2.11, 2.12, and 2.13; on the JVM, JavaScript, native, and Dotty) includes the enhancements and bug fixes listed below. No source code using ScalaTest/Scalactic 3.1.2 should

www.scalatest.org

예제 코드의 변경사항만 적어보자면,

 

WordSpecLike -> AnyWordSpecLike 로 변경 (org.scalatest.wordspec.AnyWordSpecLike 패키지 사용)

MustMatchers -> Matchers 로 변경 (org.scalatest.matchers.must.Matchers 패키지 사용)

 

두가지다, 이부분을 적용해보면,

 

class SilentActor01Test extends TestKit(ActorSystem("testsystem"))
  with AnyWordSpecLike /*scalatest 3.2.0 에서 변경*/
  with Matchers /*scalatest 3.2.0 에서 변경*/
  with StopSystemAfterAll {

  "A Silent Actor" must {

    "change state when it receives a message, single threaded " in {
      //Write the test, first fail
      fail("not implemented yet")
    }

    "change state when it receives a message, multi-threaded" in {
      //Write the test, first fail
      fail("not implemented yet")
    }
  }
}

이렇게 된다. 빌드도 정상적으로 된다.

 

참고들 하시길.

블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Blender 상에서 아래와 같은 구조로 되어있을 때,  



getObjectByName 함수를 사용하면 각 객체들 (Mesh, Object3D, Camera, Light 등등) 을 불러올 수 있다. 


var cube2 = object.scene.getObjectByName("Cube")
var groupCylinder2 = object.scene.getObjectByName("GroupCylinder")
var cylinder2 = object.scene.getObjectByName("Cylinder")
var camera2 = object.scene.getObjectByName("Camera")
var light2 = object.scene.getObjectByName("Light")


하지만 Animation 의 경우는 읽어오질 못하는듯.... 혹시 읽는 방법 아시는분 댓글로 공유 부탁드립니다.

'프로그래밍' 카테고리의 다른 글

LuaJIT 의 성능 테스트  (0) 2010.01.11
블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,

대학원 입학 후

2020. 9. 22. 23:41

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

2014년 호치민에서.



2014년에 겪었던 견디기 힘들었던(하지만 지금 보기엔 별 것 아니었던) 시련은 하나의 터닝 포인트였다. 


여러곳을 돌아다녔고, 여러사람들을 만났으며, 한걸음 물러서서 나 자신을 바라보았다. 


지난 6년 동안 여러곳을 돌아다니며 시야를 넓혔다면, 


이번엔 좀 더 깊은곳을 바라봐야 할 때 인 듯 하다. 


2020년 4월 21일 무엇인가를 해보기로 결정.


올해 하반기는 연습 및 경험 쌓기로 도전 해 보기로 하고. 


내년 상반기 시작을 목표로 하자 

'생활 > 넋두리 ' 카테고리의 다른 글

맥북 아이폰 연결 문제 해결  (17) 2019.07.29
면접 후기, 퇴근길  (0) 2019.03.12
2016년 8월 1일, 떠나며.  (0) 2016.08.01
편지 - 김광진  (0) 2016.07.17
차분하게....  (0) 2016.06.08
차갑게 생각해라....  (0) 2016.05.29
난 제대로 걸어가고 있는걸까?  (0) 2016.05.17
2015년 12월 8일, 포기.  (0) 2015.12.08
잠이 안오는 밤.....  (0) 2015.05.26
멘탈붕괴....  (0) 2015.04.26
블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Slick 으로 DB CRUD 를 해보고 있는데


DateTime 을 읽을 때 아래와 같은 오류가 난다.


java.time.format.DateTimeParseException: Text '2019-07-24 00:00:00' could not be parsed at index 10


"scala slick date" 키워드로 구글링 검색 결과, Slick 3.3.2 Upgrade Guide 가 나온다.  일단 들어가본다


https://scala-slick.org/doc/3.3.2/upgrade.html


사용중인 DBMS 는 mySQL.


Upgrade Guide 의 slick.jdbc.MySQLProfile 부분에 보면 DateTime -> LocalDateTime 으로 Parsing 될 때 


어떤 타입의 Texts를 읽는지 나온다. 


java.time.LocalDateTime TEXT '2019-02-03T18:20:28.661'


즉 yyyy-mm-dd'T'hh:MM:ss 형태로 있어야 하는데, T 가 없어 10번째 인덱스를 로딩하는중에 에러가 났던 것.


DB 를 바꾸긴 힘들고, Slick 로딩부분을 수정할 방법을 찾는다. 


Upgrade Guide 에서 제공하는 링크를 참고하여 코드 수정 시작 

(참고 : https://github.com/d6y/instant-etc/blob/master/src/main/scala/main.scala#L9-L45)



import java.sql.ResultSet
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

trait NewMySQLProfile extends slick.jdbc.JdbcProfile with slick.jdbc.MySQLProfile {
  override val columnTypes = new JdbcTypes
  class JdbcTypes extends super.JdbcTypes {
    override val localDateTimeType : LocalDateTimeJdbcType = new LocalDateTimeJdbcType {
      override def getValue(r: ResultSet, idx: Int) : LocalDateTime = {
        val pattern = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
        r.getString(idx) match {
          case null => null
          case iso8601String => LocalDateTime.parse(iso8601String, pattern)        }
      }
    }
  }
}

object NewMySQLProfile extends NewMySQLProfile


코드는 전부 올려두었으니, 분석은 이거 읽는분이 알아서... 


그리고 Slick 의 코드에 



import slick.jdbc.MySQLProfile.api._ 

이 부분을 


import NewMySQLProfile.api._ 

로 바꾸면 된다. 패키지 & 클래스명은 자기의 패키지에 맞게 수정하시길.

블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

1. 빌드 툴 

 - SBT, 스칼라는 라이브러리 의존성 및 빌드를 위해 SBT 를 사용, 자세히 까지는 아니어도, 대략적으로라도 알고 있어야 함 

   https://github.com/sbt/sbt


2. Typesafe Config 

 - 스칼라에서는 환경 설정등을 읽어들이기 위해 Typesafe 를 사용함, resources 안에 application.conf 를 넣어서 관리하거나, 다른 방법으로 관리할 수 있음.

    https://github.com/lightbend/config


3. 그 밖의 라이브러리 & 프레임워크 

 - cats : 이런저런 일을 해주는 라이브러리 

 - slick : DB 접근 라이브러리 

 - play framework : 웹 서버 프레임워크

 - akka : actor 기반 작업용 프레임워크 


기본기를 잘 쌓자. typesafe 부터 반복연습

블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

1. 액터 

  - 각자의 특정 작업을 수행, 각자의 Queue 를 갖고있고 dequeue 한 후 작업을 수행 


2. Supervisor 

  - 액터들의 상태를 감시하는 액터. 계층상 상위에 있는 액터는 슈퍼바이저가 된다. 


3. 테스트 

  - SilentActor -> 메세지를 받기만 하고 외부로 아예 안내보내는 액터, underlyingActor 으로 접근해 확인하거나 , expectMsg 함수호출해서 확인한다. 

  - SendingActor -> 받은 메시지를 다른 액터에 보낼 때 사용하는 방법, expectMsgPF 사용한다. 

  - SideEffectActor -> Side Effect 가 있는경우 사용 (가령 함수 내에서 로그 메시지를 출력한다거나..), 리스너를 사용할 수 있다. 


4. 내고장성 

  - 액터에 여러가지 문제가 생겼을 때, 어떻게 작동할 지 설정할 수 있다. 

  - 재시작, 종료, 진행, 위로전달 전략을 설정할 수 있으며, OneForOneStrategy 는 한개의 액터에만, AllForOneStrategy 에는 자기 휘하의 모든 액터를 종료한다.

블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

코세라 스칼라 강좌 4.4 Variance 중.


Typing Rules for Functions 


If A2 <: A1 and B1 <: B2 then

    (A1 => B1) <: (A2 => B2)


뭔 소린지 전혀 몰라서 수시간을 고민해보다가 stackoverflow 보고 이해 


원문 주소는 https://stackoverflow.com/questions/41098105/subtyping-between-function-types 여기


내가 이해한 방식으로 정리한다. 


1. subtype 이다? 

  - subtype 이란건 'a 는 b 이다' 의 is - a 관계가 성립하는거.


2. (A1 => B1) <: (A2 => B2) 임을 증명하려면 

  - '(A1 => B1) 함수(이하 F1)는  (A2 => B2) 함수(이하 F2)다' 가 증명되면 됨.

    

'F1 는 F2 이다 ' 가 true 가 되려면 필요한 규칙은 


F2(a) 를 F1(a) 로 바꿔도 에러 없이 정확한 값이 나와야 한다는 소린데(리스코프의 치환 원칙), 이소리는 즉


1. F2 의 모든 input 이 F1 에서 에러가 없어야 함

2. F1 의 모든 output 이 F2 의 output 이 되어야 함


저 규칙에 맞나 보면 

1. F2 의 모든 input 이 F1 에서 에러가 없어야 함

  -> 만족한다. A2(F2 의 input) <: A1 (F1 의 input) 이기 때문에, A2 는 A1 의 부분집합이고, A2의 모든 원소는 A1 이다.

2. F1 의 모든 output 이 F2 의 output 이 되어야 함 

  -> 만족한다. B1(F1 의 output) <: B2(F2 의 output) 이기 때문에 B1 은 B2 의 부분집합이고, B1 의 모든 원소는 B2 이다.


이 때문에 'F1 은 F2 이다' 는 참이고, F1 은 F2 의 subtype 이다.


맞나 이거? 


    

블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

다시 한번 복습 


A <: B 이고 C[A] <: C[B] 인걸 Covariant

A <: B 이고 C[A] >: C[B] 인걸 Contravariant


Contravariant 는 주로 함수를 파라미터로 넘길 때 일어난다고 이야기 함.


이걸 그림으로 다시 생각 해보자, 일단 아래와 같은 클래스가 있다. 


class Animal {}

class Bird extends Animal {}
class Chicken extends Bird {}
class Duck extends Bird {}


이걸 밴 다이어 그램으로 그려보면 아래와 같이 된다.



이제 함수를 선언해보자. 

object HelloWorld {
  type FunctorType[A] = (A => String) //함수타입 한개 선언

  val animalFunc : FunctorType[Animal] = { a => "Animal" }
  val birdFunc : FunctorType[Bird] = { a => "Bird" }
  val chickenFunc : FunctorType[Chicken] = { a => "Chicken"}
  val duckFunc : FunctorType[Duck] = { a => "Duck"}
}


위의 밴 다이어 그램을 보면서 다시 정리해보자 


Animal >: Bird 이면, FunctorType[Animal] 과 FunctorType[Bird] 의 관계는?


FunctorType[Animal] 을 풀어보면 Animal => String 이고, 

FunctorType[Bird] 을 풀어보면 Bird => String 인데, 

위의 벤 다이어그램에서 보면, Bird 는 Animal 의 부분집합 이니까, 모든 Bird 는 Animal 이다. 따라서, 


FunctorType[Bird]  는 Bird => String 도 될 수 있고, Animal => String 도 될 수 있다. 


때문에, FunctorType[Animal] <: FunctorType[Bird] 이 되고, 


FunctorType 은 contravariant 가 된다... 

블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

코세라 강의 보는 중에 


A <: B 이고 C[A] <: C[B] 인걸 Covariant 

A <: B 이고 C[A] >: C[B] 인걸 Contravariant 라고 한다.


Covariant 는 이미 알고있는 거고,

Contravariant 가 무슨소린지 도저히 모르겠어서, 구글링... 하다가 하나 발견... 4시간에 걸쳐 겨우 이해하고, 정리글을 남긴다. 


아래와 같이 클래스들이 있고, 함수 타입 한개를 선언한다.


그리고 몇가지 함수들을 선언한다.

class Animal {}

class Bird extends Animal {}
class Chicken extends Bird {}
class Duck extends Bird {}

object HelloWorld {
  type FunctorType[A] = (A => String) //함수타입 한개 선언

  val birdFunc : FunctorType[Bird] = { a => "Bird" }
  val animalFunc : FunctorType[Animal] = { a => "Animal" }
  val chickenFunc : FunctorType[Chicken] = { a => "Chicken"}
  val duckFunc : FunctorType[Duck] = { a => "Duck"}
}


이경우 클래스 관계는 


Animal <- Bird <- Chicken

Animal <- Bird <- Duck


이런 형식으로 된다. 다들 알다시피 


하지만 함수 아래와 같이 함수가 파라미터로 전달 될 때도, 다형성이 그대로 유지될까?

def test_contravariant(a: FunctorType[Bird]): Unit = {
    val ret1 = a(new Chicken);
    println(ret1)
    val ret2 = a(new Bird);
    println(ret2)
}



test_contravariant(animalFunc) 
test_contravariant(birdFunc) 
test_contravariant(chickenFunc)  //컴파일에러
test_contravariant(duckFunc)     //컴파일에러


맨 처음 봤을때는 의외의 결과였다. 그 전에 C++ JAVA 에서 써왔던 것과 반대로 나타났기 때문이다. 


내친김에 covariant 도 테스트 해본다. 


def test_covariant(a: Bird) : Unit = {
    println(a.toString)
}


예상한대로 결과가 나온다.


test_covariant(new Animal) //컴파일에러 test_covariant(new Bird) test_covariant(new Chicken) test_covariant(new Duck)


클래스 상속과 관련해서 생각을 다시 정리해본다. 


"

슈퍼클래스의 참조로 하위클래스의 객체를 생성하거나 파라미터로 전달해도 문제가 없는 이유는, 

하위클래스라고 해서 있던 public 함수/변수가 없어지거나 하지 않기 때문이다.

"


그리고 contravariant 예제를 다시한번 본다.


val animalFunc : FunctorType[Animal] = { a => "Animal" }
val birdFunc : FunctorType[Bird] = { a => "Bird" }
val chickenFunc : FunctorType[Chicken] = { a => "Chicken"}
val duckFunc : FunctorType[Duck] = { a => "Duck"}

def test_contravariant(a: FunctorType[Bird]): Unit = {
    val ret1 = a(new Chicken);
    println(ret1)
    val ret2 = a(new Bird);
    println(ret2)
}


test_contravariant 의 파라미터로 chickenFunc 나 duckFunc 를 넘기게 되면, 


Chicken 클래스에는 있는 public 함수지만, Bird 클래스에는 없는 public 함수가 있을 수 있다.

Duck 클래스에는 있는 public 함수지만, Bird 클래스에는 없는 public 함수가 있을 수 있다.


하지만 animalFunc 을 test_contravariant 로 넘기게 되면,

Animal 클래스에 있는 모든 public 함수는 Bird 클래스에 있다.


이때문에 FunctorType[슈퍼클래스] 에 대해서는 다형성이 일어나지만,

FunctorType[하위클래스] 에 대해서는 다형성이 일어나지 않는다. 

즉, 상속 관계가 역전이 된다. 


이런 경우가 A <: B 이고 C[A] >: C[B] 이며, 

이를 contravariant 라고 부른다. 




블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

play framework로 이런저런 작업과 스칼라 관련 모임에서 코드를  보는 와중에 

 

implicit 키워드가 눈에 자주 보인다. 

 

나중에 혼란스러워 하지말고 미리 정리.

 

- implicit parameter 

(참고 : https://docs.scala-lang.org/ko/tutorials/tour/implicit-parameters.html.html

먼저 메인 클래스를 선언한다.

object HelloWorld {
  def main(args: Array[String]): Unit = {
    println("hello, world!")
  }

  def testFunction(name : String)(implicit liveObject : LiveObject) : Unit = {
    println("I am " + name)
    liveObject.introduce();
  }
}

 

간단하다, Hello, world 문자열하나만 보여준다. testFunction 은 implicit 파라미터로 LiveObject 를 사용중이다.

testFunction 은 지금 당장은 사용하지 않으니 "이런게 있구나" 수준으로 넘어가자.

 

trait의 내용은 아래와 같다. 

trait LiveObject {
  def introduce() = {
    println("I am LiveObject")
  }
}

이제 LiveObject 를 믹스인한 클래스 두 개를 생성한다.

class Animal extends LiveObject {
  override def introduce(): Unit = {
    println("I am Animal")
  }
}

class Human extends LiveObject {
  override def introduce(): Unit = {
    println("I am Human")
  }
}

 

간단하다 introduce 를 재정의 해서 문자열 하나만 다르게 재정의 했다.

 

준비작업은 모두 끝났다. 이제 main 함수 내에서 testFunction 을 호출을... 했는데? 어라? 에러가 있네?

main 함수 안에서 testFunction 호출한 모습

에러 내용을 자세히 보면 

implicit 파라미터 없음.

직접 넣어줄 수는 있다.. 근데 이건 '암시적' 아닌 것 같아 다른 방법을 찾아본다.

 

바로 위에 Animal 변수를 하나 추가해준다.. 이러면 돌아가겠지.

 


object HelloWorld {

  def main(args: Array[String]): Unit = {
    println("hello, world!")
    val animal = new Animal
    testFunction("thomas")
  }

  def testFunction(name : String)(implicit liveObject : LiveObject) : Unit = {
    println("I am " + name)
    liveObject.introduce()
  }
}

 

여전히 에러가 난다. 

 

여전히 변수를 못찾음.

암시적 파라미터 관련 스칼라 문서를 다시 읽어보면... 

 

스칼라 컴파일러는 implicit 파라미터를 만났을 때, 실제 파라미터에 할당할 변수를 검색하는데 규칙은 다음과 같다. 

1. 메서드가 호출되었을 때, prefix 없이 접근할 수 있는 변수 (당연히 변수들은 implicit 키워드가 붙어야 함.)

2. implicit 키워드가 붙은 암시적 파라미터와 관련된 모든 멤버 

 

2번은 조금 어려우니 일단 1번부터, 암시적 파라미터를 설정하려면 implicit 을 붙여야 한다. 변수를 implicit 으로 변경해서 다시.


object HelloWorld {
  def main(args: Array[String]): Unit = {
    println("hello, world!")
    implicit val animal = new Animal
    testFunction("thomas")
  }

  def testFunction(name : String)(implicit liveObject : LiveObject) : Unit = {
    println("I am " + name)
    liveObject.introduce()
  }
}

이번엔 실행이 제대로 된다.


  hello, world!
  I am thomas
  I am Animal
  Process finished with exit code 0

암시적 변수 / 함수를 선언하려면 implicit 키워드를 사용하여 선언해야 정상적으로 인식하는듯

 

그러면 이번에 같은 type 을 두 개 넣으면 어떻게 될까? 


def main(args: Array[String]): Unit = {
    println("hello, world!")
    implicit val animal = new Animal
    implicit val human = new Human
    testFunction("thomas")
}

실행 해보니 아래와 같은 Exception 이 발생한다. 

 

같은 implicit 변수가 두개 선언되었을 때 Exception

머릿속에 어느정도 그림이 그려진다. 

 

implicit 파라미터는 "함수가 호출 된 타이밍" 에 prefix 없이 접근 가능한 변수 중 "가장 가까운 변수 " 가 할당되다 라고 이해하면 빠를듯.

 

다음번엔 implicit function 을 좀 더 봐야겠다.

 

2019년 11월 18일 추가 

 

변수의 scope 가 다를경우 같은 타입의 implicit 의 선언이 가능하다. 이 경우에 가장 최근에 선언된 implicit 변수가 사용된다.

 


object HelloWorld {
  def main(args: Array[String]): Unit = {
    println("hello, world!")
    implicit val human = new Human
    overlapfunction()
  }

  def overlapfunction()(implicit liveObject : LiveObject) : Unit = {
    implicit val animal = new Animal
    testFunction("thomas")
  }

  def testFunction(name : String)(implicit liveObject : LiveObject) : Unit = {
    println("I am " + name)
    liveObject.introduce()
  }
}

위 코드를 실행하면 아래와 같은 결과가 나온다.

 

 


hello, world!
I am thomas
I am Animal
블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

맥북 - 아이폰을 케이블로 연결하면 


연결 / 연결해제 가 반복으로 일어날 때가 있음 


이떄는 그냥 터미널 창 열고 


sudo killall -STOP -c usbd


한 다음 다시 연결시도.

'생활 > 넋두리 ' 카테고리의 다른 글

터닝 포인트.  (0) 2020.04.21
면접 후기, 퇴근길  (0) 2019.03.12
2016년 8월 1일, 떠나며.  (0) 2016.08.01
편지 - 김광진  (0) 2016.07.17
차분하게....  (0) 2016.06.08
차갑게 생각해라....  (0) 2016.05.29
난 제대로 걸어가고 있는걸까?  (0) 2016.05.17
2015년 12월 8일, 포기.  (0) 2015.12.08
잠이 안오는 밤.....  (0) 2015.05.26
멘탈붕괴....  (0) 2015.04.26
블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

이번 하노이 여행은 그동안 가보지 못했 던 곳을 모두 갔다... 


덕분에 관광하며 즐겼다기 보다는


친구와 함께하는 시간이 더 많았다... 


덕분에 사진은 얼마 없음 ㅎㅎ


레닌동상, 다들 아시다시피 베트남은 '사회주의' 국가이다.



탕롱황성, 다른 사진들은 전부 핀이 나갔다. 


성 요셉 성당 앞의 반미집, 여기 맛집이다.


호안끼엠 호수 앞 건물. 여긴 볼때마다 정겨움.


호안끼엠 호수.


친구와 같이 간 피자집에서, 피자가 무지 맛있다.


하노이 오페라 하우스. 내부 관광은 불가능 했던 듯.


이런저런 사진이 있지만, 다들 맘에 들지 않아 일단 여기까지 ㅎㅎ 


'여행 및 출장 > 하노이 (2019.07.04 ~ 08)' 카테고리의 다른 글

하노이 - 기찻길마을  (0) 2019.07.09
블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

하노이에 올 때 마다 계획을 세웠지만, 이런저런 일이 생겨 못 갔었던 기찻길마을 


이번 여행때 드디어 다녀왔다. 


구글 맵을 참고하여 택시를 탄다. 


도착 했지만, 약간 섬뜩한 메시지가 날 반긴다.


위험지역, 사람 모으지 말고, 촬영하지 말고, 걷거나 앉지말고 좌판 깔지 말것, 한마디로 '접근금지'


하지만 사람들은 경고판을 비웃듯, 이리저리 둘러보고 있다. 나도 마찬가지였다. 


이런게 안전불감증인듯.... 


놀고있는 어린이들, 어렸을 때 책에 나왔다, 철길 저렇게 걷지 말 것



날이 덥다, 습도가 높고 햇볕은 쨍쨍하다. 


하노이의 더위엔 도통 적응이 안되지만, 광량이 충분해 사진은 잘찍히겠다. 


핀이 살짝 나가, 살짝 조정해 봄



누군가를 기다리는가.... 떠나간 여친?


기념촬영중 


기찻길 양옆으로 가게들이 줄서있다. 일단 주변을 둘러보고, 커피 한잔 하리라.


기찻길옆 오막살이... 가 아닌 카페


여기서도 반미 한번 먹어볼껄 그랬다.


뭔가 멋진 캘리그래피... 종이공방인가? 그림파는데였나? 


분노의 질주. 왠지 기차와 이미지가 잘 맞는다.


한바퀴 둘러보고 맨 처음 왔던 카페에 돌아온다. 시계를 보니 한 15분 뒤에 오는듯. 


연유 커피 한잔과 함께 더위를 피한다. 땀이야 흐르던 말던 신경을 끄고 몸의 움직임을 최소한으로 줄인다.... 조금씩 더위가 가신다.


조금기다리다 보니 시간이 된 듯, 사람들이 조금씩 모이기 시작한다. 


3분 정도 지났을 까? 기차가 오기 시작한다.


칙칙 폭폭 땡~~


기차가 지나가는 순간.

기차가 너무 가까이 지나가 순간 움찔... 달리는 기차가 왜 위험한지 아주 조금은 느끼는 순간... 


이정도로 가까이 지나간다, 아찔하다.

사진을 찍고, 다시 카페에 앉는다. 맞은편에 한국인 한분이 합석을 하셔서, 이런저런 이야기를 해본다. 


난 다시 카메라를 들고 주변을 찍는다.


카페 주인, 얼굴이 타는게 싫었던듯.. 


신체적/정신적 특징에 상관 없이 모두가 다 안전합니다.



하노이 기찻길 마을


이분은 누구를 기다리시나... 


악세사리 가게.. 하나 살 껄 그랬다.


베트남 여행은 여름이 비수기인듯... 날이 무척 덥긴 하지만, 그만큼 사람도 없어 여유로운 여행이 가능하다. 


물론 사진 찍는걸 좋아하는 나에게 하노이의 7월은 최고의 달인듯... 날씨도 맑고 해도 쨍해 예쁜 사진이 많이 나온다. 





'여행 및 출장 > 하노이 (2019.07.04 ~ 08)' 카테고리의 다른 글

하노이 - 그 밖에  (0) 2019.07.11
블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

다음에 다시 정리할 예정입니다.

블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

요즘 채용 관련 업무가 추가되어 이력서 및 면접을 진행하는데.... 몇몇 패턴이 눈에 보인다

1. 똑같은 틀의 이력서
- 보유기술 / 사용기술은 매우 많다, 내가봐도 '우와' 소리가 나올 만 한 수준이다.

2. 그래픽 리소스만 다른 똑같은 포트폴리오
- 아무리 맛있는 음식이라도 두번 세번 보다보면 질리는법.

3. 면접때 물어보면 대답 할 수 있는게 없다
- 포트폴리오에 적용된 기술에서 조금만 깊게 들어가면 '모른다' 라는 대답이 나옴

과연 프로그래머가 이곳에 들어오겠냐마는 내 생각을 말해보자면

1. 기본기란, 자료구조/알고리즘을 지칭한다
- 그깟 툴쓰는법, 라이브러리 쓰는법... 이건 회사에서 가르쳐도 된다
- 근데 기본기를 바탕으로 한 문제해결능력은 가르쳐서 될일이 아니다, 가르친다해도 교육비가 비싸다.

2. 하나를 해도 제대로 해라
- 쇼핑몰 만들거면 트랜잭션 구현 까지는 해봐라.
- 게임을 만들거면 적어도 충돌처리, 몬스터 움직임 구현 까진 해봐라.

3. 학원에선 기본기를 가르치지 않는다.
- 몇몇 제외하고 기본기 가르치는곳 없다, 기본기로 위장한 몇몇 패턴만 알려준다.
- 학원에서 안가르쳐주면 스스로라도 공부해라

4. 비전공자 차별? 웃기시네
- 내가 만나본 '구루' 수준 선배님들중 비전공자 많다.
- 이분들의 공통점은 기본기(자료구조/알고리즘)가 탄탄하고, 문제해결능력이 상당하다.
- 핑계거리로 차별한다 떠들지 말고, 그만한 기본기를 가졌는지 생각해봐라.

5. 포트폴리오로 내는거, 아무리 화려해도 면접에서 발가벗겨진다.
- 질문 몇개 해보면 직접 만들었는지 어디서 베꼈는지 답나온다, 다시 말하지만 하나를 해도 제대로 해라


써보니 누워서 침뱉기구만... 하하...

'생활 > 넋두리 ' 카테고리의 다른 글

터닝 포인트.  (0) 2020.04.21
맥북 아이폰 연결 문제 해결  (17) 2019.07.29
2016년 8월 1일, 떠나며.  (0) 2016.08.01
편지 - 김광진  (0) 2016.07.17
차분하게....  (0) 2016.06.08
차갑게 생각해라....  (0) 2016.05.29
난 제대로 걸어가고 있는걸까?  (0) 2016.05.17
2015년 12월 8일, 포기.  (0) 2015.12.08
잠이 안오는 밤.....  (0) 2015.05.26
멘탈붕괴....  (0) 2015.04.26
블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

오랜만에 차도 굴릴겸 해서 연천역 급수탑좀 보고 오기로 한다. 


일단 출발... 집에서 두시간이 채 안걸렸다.


도착하자마자 눈에 보였던 급수탑, 기차와 같이 서있다.


연천역 급수탑


근처에 서있던 기차. 미카3 161 이란 번호가 선명하다.


좀 더 가까이 로 가서 찍어보았다.



기차가 한시간에 한대씩 오는듯... 


기차 들어오는걸 볼까 하다가, 그냥 사진만 찍기로 했다. 


지인이 말하길 '칼 자이스 렌즈는 조리개를 조일수록 좋아' 라고 하기에, 일단 조리개를 좀 조여보기로 한다. 


연천역에서, 약간 쓸쓸해 보인다. 



연천 역, 나름 느낌이 조금 있어보인다.



보통 조리개를 최대로 연 다음 찍었었는데... 조리개를 조인 사진들도 은근히 괜찮다. 


캔커피 한잔 먹고, 다음 갈 곳을 찾아보기로 한다. 파주 쪽에 영국군 참전 기념비가 있다고... 일단 찾아가본다. 


기념공원 입구,


간단히 참전비 인줄 알았는데, 공원 수준으로 꾸며놓았다. 


공원 한 가운데에서... 


뒤쪽엔 비석과 꽃이 하나 있었다. 


꽃에 붙어있는 이름을 보니 피우진(현재 국가보훈처장), 국가보훈처에서 주기적으로 제공하는 꽃인듯... 



희생자 추모비, 뒤의 비석은 거의 닳은 듯, 쉽게 읽을 수가 없다.



칸 중령 십자가, 칸 이란분이 포로생활을 하면서 만든 십자가라고 한다.


추모공원 근처, 전투에 참여한 나라의 국기를 걸어둔 듯... 


공원 입구, 자유, 우정, 평화



블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

찌는 듯한 여름. 


개인적인 리프레시 & 스틸러스 경기 직관을 위해 포항으로 


죽도시장에서 고래 고기인듯... 


죽도시장에서


역시 죽도시장


포항에 있다는 '카페 아이언로즈' 가 생각났다. 지도를 찾아보니 나온다. 일단 택시 타고 포항운하 배타는곳으로... (카페가 근처에 있다.)


도착해서 좀 찾아봤는데.... 문닫았다.. 


여기였었는데... 동물 카페로 변경됨... 히잉..


포항운하 박물관을 둘러보고, 배를 타보기로 한다. 


원래 포항운하는 물길이었지만, 산업화가 진행되면서 매립.... 했으나, 


쌓여가는 퇴적물로 인해 악취가 심해지고, 매립된 지역은 점점 슬럼화가 진행되었다고... 


때문에 물길을 터서 문제를 해결했다고 한다. 


(설명해주신 여고생 자원봉사자 분들께 감사...)


포항 운하



조형물, 근처엔 쇼핑몰이 계획되어 있다고 한다. 


좁은 길을 따라 좀 나가니, 죽도시장과 부두가 나온다. 


죽도시장 근처인듯



좀 더 가다보니 반대편 으로는 요트들이 서있다.. 


요트들... 


배를 돌려서 다시 탔던 곳으로 간다... 바람이 불어 외해쪽으로는 나가질 못한다고...


멀리 보이는곳이 선착장이다. 


북부 해수욕장서 잠시 점심 먹고, 호텔로 복귀 해서 잠시 쉬다가... 스틸야드로 향한다. 


2014년에 마지막으로 왔으니 4년만인듯... 


포항 스틸야드, 오랜만이야~


칭따오존 티켓 한장 구입 2만원 정도... 가격이 참 착함


경기장에 앉아있으니 선수들이 들어오고 경기 시작




강현무... 



스틸야드 N석, 사람이 좀 더 많이 왔으면 하는 바람이 조금 있다.


경기 시작 전, 스크럼 짜고 뭔가 이야기를 하는듯..


결과는 0-3 졌다... 그냥 발렸다 하하... 이런... 


호텔로 돌아오는 길이 왜그리 긴지 하하... 


푹 자자, 그리고 다음날 일찍 올라가자 

블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

블로그 사진 정리중에 이런저런 이유로 그냥 놔둔 사진들 방출 


소니 카메라 & 캡쳐원에 점점 익숙해져 가는듯


이젠 보정이 재밌네.. 


출발 전, 드디어 나도 A380 을 타봤다. 


도착 후 호텔 가는길, 열차시스템이 네덜란드와 많이 비슷하다.


도착 후 찍은 사진, 뭔가 맘에 안들어 냅뒀는데, 후에 보정 좀 해주니 뭔가 감성이 생긴다.


사진의 대비값을 좀 주면 이런 사진이 나오는듯... 


아인트라흐트 프랑크푸르트 박물관에서... 이 사진이 왜 빠졌나 싶다.


훈련하러 가는 선수들, 코메르츠방크 아레나 


아르연 로벤, 이래서 축구경기장엔 망원을 들고가야한다.


열광적인 서포터들... 이러면 축구할 맛 나지.. 


아르연 로벤, 핀/셔터스피드가 아주 안맞았는데... 보정 좀 해주니 느낌이 뭔가 있다.


역시 아르연 로벤, 핀도 괜찮아 보이는데 괜히 맘에 안들었음 ㅋㅋ 


프리킥 차기 전... 


프리킥 순간... 이것도 좀 ㅋㅋ 


바이아레나에서, 차범근의 흔적은 생각보다 위대했다.


귀국날, 공항에서.


Taxing..... 


택싱 화면을 AVOD 로 관전 가능 


Take off 


소니로 카메라를 바꾼 이후, 사진 찍는 연습이 더 많이 필요해진듯... 


핀을 맞춘다. 조리개를 조인다. 보정 한다. 라는게 어떤건지 아주 조금은 알 것 같다.


블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

눈을 떠보니 시간은 7시 30분. 


생활 패턴이 독일 시간으로 완전이 바뀌었지만, 귀국날이다. 


주변에 돌릴 선물 사고, 코메르츠방크 아레나 근처에 독일 축구협회 건물이 있다고 하여, 찾아가보기로 한다. 


(주, 내가 축구협회 건물을 방문한 시점은, 2018년 3월이다. 아직 '카잔의 기적' 이 일어나기 전임을 밝혀둔다.)


프랑크푸르트 중앙역, 이 모습도 오늘이 마지막이다. 


기차를 타고, Stadion 역에 도착, 숲 속 길을 걷는다. 공기가 맑아 숨쉬기가 너무 편하다.


stadion 역 근처 숲길, 공원같이 꾸며져 있어 산책나온 사람들이 조금 보인다. 



구글 맵을 따라 걷다보니 건물이 나온다 Deutscher Fußball-Bund, 독일 축구협회 건물이다. 


독일 축구협회 건물


도이체 푸스발 분트, 독일 축구협회 


독일 축구협회, GMBH, HRG 는 무슨 뜻인지 모르겠다.


일단 건물 안으로 들어갔다. 안에는 유니폼, 월드컵 트로피 등등이 있었다. 


리셉션 데스크의 직원이 말을 건넨다 


직원 : 왜 왔니? 예약했니?

나 : 여기 그냥 볼 수 있을까요?

직원 : 1층 로비 범위를 벗어나지는 마.


소란을 피울것도 아니고, 건물 안의 분위기가 상당히 엄숙해서... 최대한 조용히 사진을 찍기로 한다. 


독일 축구협회 예전 회장의 흉상, Hermann Neuberger.


독일 축구 대표팀의 강력함을 증명이라도 하듯, 남/여 대표팀의 유니폼들, 그리고 월드컵 우승 트로피들이 전시되어있다. 


남자대표팀 유니폼. 우승 패치를 보아하니 2014년 이후인듯...



여자대표팀 유니폼, 이건 좀 된듯 하다.



쥘 리메컵, 예전 월드컵 우승 트로피 


축구협회 건물 안에는 자신들이 모아둔 월드컵들을 하나씩 전시해두고 있다...


그중에 하나가 눈에 들어와 사진을 몇장 찍는다.


1990년 이태리 월드컵 우승 트로피


이 외에도, DFB 에서 주최하는 DFB Pokal 의 트로피 또한 보관중이다. 


(주, Pokal 은 독일어로 cup 이란 뜻...)


DFB Pokal


트로피 아래에는 우승팀의 이름을 새겨둔다. NHL 의 스탠리 컵과 많이 비슷하다.


DFB Pokal 의 아랫부분, 우승팀 리스트.


이정도면 다 봤을 듯 싶어, 건물 밖으로 나온다. 나름 일하는 공간인데 방해하기도 싫고... 


다시 stadion 역으로 걸어간다.


역으로 가는 길에 보였던 광고판. 유로 2024 에 독일이 개최 신청한듯..




stadion 역에서, 여기도 이제 안녕이다.


다시 프랑크푸르트 중앙역으로 돌아온다. 주변 사람들에게 줄 선물을 몇개 사고, 어머니 드릴 쌍둥이칼도 하나 지른다. 


비행기 시간까진 약 4시간 남짓, 호텔 근처를 한번 더 둘러본다. 


프랑크푸르트 중앙역, 떠남이 아쉽다.


중앙역 앞에서, 금호타이어 ㅋㅋㅋ



다시 보게 된 유로화 마크, 다음에 또봐요~


호텔 앞에서 바라본 중앙역 풍경


호텔 체크아웃을 하고, 공항으로 향한다. 중앙역에서 3~4 정거장인듯. 


공항에 도착해서 체크인 카운터를 확인하는데....  오 여기 상황판이 Flip 식이다... 시간이 되면 촥촥촥촥 소리가 나면서 내용이 바뀐다. ㅋㅋㅋ


공항, 항공 현황판


체크인 하고, 보안검색 받고, 출국심사 하고, 면세구역.... 에 왔는데.... 


내가 못찾는건지.. 아니면 진짜 없는건지... 면세점 물품이 그닥이다.... 


다른 블로그들을 보면 면세점 잘만 찾아가던데... 아마 내가 못찾은듯. 


행여나 이글을 볼 다른 사람들을 위해... 프랑크푸르트 공항 면세점에선 열쇠고리 정도의 기념품만 팝니다, 쌍둥이칼 / 발포비타민 등 주변 선물은 시내에서 


미리 사 오 세요 


주변 사람들 선물 사고 보니... 10유로가 남는다. 이건 나에게 쓰기로 하고 맥주를 산다. 


맥주를 먹다보니.... 옆자리 아주머니가 나에게 물어본다. 


'혹시 여기 와이파이 어떻게 세팅하나요?'


와이파이 세팅 해 드리니 고맙다시며, 안주거리(쥐포)를 몇개 챙겨준다. 


이런저런 이야기를 했는데, 패키지 여행 오신듯... 여고 동창생들끼리 환갑기념 여행을 오셨다고 한다... 흐어... 나도 과연 저럴날이 있을까 싶다... 


여튼 시간이 지나고, 탑승 시작. 


통로쪽으로 예약했지만, 이번에도 옆자리 아줌마가 바꿔달란다, 별 말 없이 바꿔준다. 


비행기 문이 닫히고 택싱을 시작한다.


택싱 중, 공항 시설이 보인다.



여긴 루프트 한자 전용인듯...



 비행기가 이륙하고, 기내식을 먹은다음, 어머니 드릴 시계를 찾아본다, 마침 자리 바꿔드린 아주머니가 한마디 건넨다 '이거 예뻐보이네요, 어머니 드릴꺼라면 추천해요'.


결국 면세품을 지른다.... 그 후 딥슬립.


몇시간이 지났을 까, 잠에서 깬다.... 중국 / 몽골 상공, 두번째 기내식이 나온다. 창문을 열어봤는데... 구름이 별로 없어 사진 한장 찍는다. 


아름다운 사람들, 아시아나 항공.


결국, 인천에 무사히 도착. 


개인적인 사정으로 여행기가 어어어엄청 늦게 쓰여, 뭐 느낌이라던지 그런걸 표현하고 싶은 마음이 안든다. 


여튼 독일 여행기는 이걸로 끝. 

블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

어김없이 아침에 일어난다. 


호텔에서 바라보는 프랑크푸르트의 풍경이 이젠 익숙하다. 


시차에도 완벽하게 적응 했는데... 내일이면 귀국이란 사실이 안타깝다. 


마냥 안타까워 하기엔 시간이 아까워 짐을 챙긴다. 


호텔 방에서 찍은 프랑크푸르트 중앙역


오늘 둘러볼 곳은 Leverkusen, 차범근과 손흥민이 뛰었던 Bayer04 Leverkusen 이 있는 도시다. 


오늘은 역에서 맥모닝 & 커피로 아침을 해결한다. 


티켓을 보니 ICE 는 Köln 까지,  Köln 에선 다시 S 반을 타고 이동, Leverkusen mitte 역으로 이동한다. 


전철을 기다리며... 추억의 뒤셀도르프 


2017년 11월 경, MEDICA 라는 전시회 참관을 위해, 뒤셀도르프에 왔던 적이 있었다. 


재밌는 일들이 많이 일어나, 좋은 추억으로 남았었는데... 지금 다시 이렇게 보니 느낌이 묘 하다 ㅋㅋ 


조금 기다리니 전철이 온다, 전철 타고 Leverkusen Mitte 역으로 간다. 


밖은 비가 오고있어, 이날은 사진을 그리 많이 찍지 못했다. 


어쨌거나 Leverkusen mitte 역 도착, 구글맵을 찾아보니 근처에서 버스를 타고 가라고... 근처 정류장에서 버스 타고, 바이아레나 도착.


드디어 도착한 바이아레나!


바이아레나는 특이한게, 상설 팬샵이 경기장에 없다, 팬샵은 Leverkusen mitte 역으로 가야 한다고... 


일단 스타디움 투어가 있는지 물어본다... 없으면 뒤셀도르프까지 한번 가보지 뭐... 생각하며 티켓박스로 간다. 


나 : "스타디움 투어 있나요?"

직원 : "오후 2시에 있어요."


지금은 12시... 뭐 별 수 없네, 기다리기로 한다. 투어가 없는것도 아니고, 2시간만 기다려보기로 한다. 


일단 비가 오고 날이 쌀쌀하다, 맥도날드에서 몸좀 녹이고, 배도 좀 채우기로 한다. 


바이아레나 앞에 있던 맥도날드.


커피 한 잔 하면서 시간을 때워본다 .


쓸데없는 사진도 찍어보고



쓸 데 없이 풍경도 한장 찍어본다, 춥다 추워


바이엘 레버쿠젠


바이엘 레버쿠젠


시간이 점점 되어간다. 일단 주변을 돌아다녀보니... 사람 2~3명이 모여있다. 거기가본다, 혹시 투어 왔냐고 물어보니 맞단다 후후 


같이 기다려본다. 뭔가 할말도 없고 어색한 침묵만 하하...


한 10분 정도 남았을까? 직원이 문을 연다. 독일어로 뭐라뭐라 하는데 아마 스타디움 투어 관련일거다.... 


나도 따라들어가본다. 다행히 안쪽은 따뜻하다. 


경기장 내 카페... 펍인가? 아니면 레스토랑? 


 차범근의 흔적은 여기서도 찾을 수 있었다.


차범근의 흔적..


규모가 작아서 그런지 이번 투어는 조촐하다. 총원 4명, 후후.. 가이드분이 투어 목걸이를 나눠주고, 입장료 20유로 정도를 받아간다. 


바이아레나 투어, 드디어 시작이다. 


바이아레나 윗층


경기장이 전체적으로 아담하다... 스틸야드보다 약간 큰 정도? (스틸야드 25,000명, 바이아레나 30,000명)


독일 월드컵 때 여기서 경기가 열렸었냐고 물어봤는데... 독일 월드컵 경기는 없었고, 여자월드컵 경기만 했었다고... 


바이아레나, 웅장한 외관과는 반대로, 아담하다.


다른 쪽 스탠드, BayArena 간판이 있는 쪽 바로 아래가 스카이박스(VIP석) 이라고 한다.


그 다음으로 간 곳은, 구단 역사관 비슷한곳... 


애석하게도, 레버쿠젠은 우승과 별 인연이 없는 것 같아보였던 듯 하다... 


(하도 우승을 못해서 Neverkusen 이라고 불리기도 한다고...)


챔피언스리그 참과 관련 기념품 


발락의 유니폼...


발락의 유니폼을 봤는데... UEFA 챔피언스리그 유니폼이네... 설마 콩라인의 정점을 찍은 이땐가? 


파일:external/24.media.tumblr.com/tumblr_lyw06jgSnm1r6mwuno1_1280.jpg

맞네... 맞아... 그때 그 유니폼이네...


2001/02 시즌 발락의 성적

 -> 비단 발락 뿐이 아니다... 레버쿠젠 소속으로 독일 대표팀이었던 선수(노이빌레, 슈나이더 등...) 전체다..

분데스리가 준우승

DFB 포칼 준우승 (한국의 FA CUP에 해당)

UEFA 챔피언스리그 준우승 

월드컵 준우승


이 모든 준우승이 단 3~4 개월만에 이뤄진게 신기할정도로... 


... 누가 이렇게 하라고 해도 힘들 정도의 준우승 쿼드러플 달성...


여튼 그때의 유니폼을 보게되니 만감이 교차한다... 


그래도, 우승경험이 아주 없진 않다. 트로피가 몇개 보인다. 


UEFA Cup..


UEFA Cup 이 진열되어있는데... 이게 어떤거냐면... 


파일:attachment/Chabum.jpg

요거다...


차범근 아저씨가 갖고온 바로 그것... 


잠시 보다가 다음 장소로 이동한다. 


기자석에서 바라본 경기장


VIP 석, 스카이박스가 골대뒤에 있다.


잠시 이런저런 이야기를 한 후에, 다음 장소로 이동한다. 이번엔 기자회견장이다.


바이아레나 기자회견장.


이번에도 역시, 기념촬영을 부탁한다.


바이에른 레버쿠젠, 한국인 영입!


다음 장소로 이동... 이번엔 믹스드 존 이다. 


이런 저런 이야기를 하고 있는데, 바로 옆에 구단 관계자로 보이는 사람들이 뭔가 이야기를 하고 있다. 


그냥 사진 한 방 찍는다.


구단 관계자로 보이는 사람들..


일행 중 한분이 갑자기 가이드한테 이런저런 이야기를 한다. 


가이드가 저 구단 관계자들 에게 가더니 뭐라 하고, 그중 훈련 티셔츠 입은 분이 와서 사진을 같이 찍는다... 


누군진 모르지만 엄청 유명한 사람인 것 같다. 나도 찍어달라고 한다.


유명하다고 생각된 구단 관계자분... 누군지 아시겠는가?


미안하게도 저 때 까지 저 구단 관계자분이 누군지 몰랐다.... 


분데스리가엔 그리 큰 관심이 없었으니... 라고 생각 하기엔 준비 부족이다.


Aㅏ... 그래도 나는 축빠란 자부심이 있었는데....


잡설이 너무 길었다. 저 구단 관계자가 누구였냐면... 



베른트 레노 (2018년 아스날 이적) 다.... 


가이드분이 베른트 레노 라고... 독일 대표팀 3rd 골리 라고 이야기를 해줬는데도 몰랐다니... 


하긴 독일하면 다들 노이어라고 하긴 하지만... 쩝... 


여튼 괜히 쑥쓰러워 하며 투어 진행.. 


믹스드 존... 


경기 종료 후 선수들이 인터뷰 하는 곳이다.. 


잠시 이야기 하고, 가이드분이 문을 연다. 이번엔 피치 안에 들어가는듯.. 


선수 입장 통로를 지나, 경기장으로


바이아레나, 잔디밭에서.



바이아레나, 선수 입장통로에서 바라본 관중석. 뭔가 멋있다.


원정 응원석, 혹시 모른 사태를 막기위해 철조망으로 둘러쌌다.


이런 저런 이야기를 다시 한 후, 투어 시작점이었던 그 카페로 돌아왔다. 


잠시 몸을 녹인 후, 다시 Leverkusen mitte 역으로 출발.... 


뭐 중간에 전철을 잘못 타, 뒤셀도르프 경계 까지 간건 차치하고... 


오는길에 본 에 잠시 들르기로 한다. 하리보 본점에서 젤리 좀 사자... 


하리보 본점


뒤셀도르프 경계 까지 갔다오는 뻘짓거리를 한 후, 본에 와서 보니 해가 다 졌다. 이제 마지막 밤이구나... 


본에서 하리보에 미쳐있는 사촌 동생을 위해 젤리 몇개 구입, 


다시 프랑크푸르트로 향한다... 


본 에서 기차역 가는 길에... 건물 이름은 잘 모름..


본에서 프랑크푸르트 까지 오는 길을 설명하자면 다시 입에 침이 마른다. 


본 -> 프랑크푸르트 까지 가려면 Köln 으로 일단 가야 하는데, 거기까지 가는 열차는 종료된듯... 


구글 맵을 켜보니 마인츠에서 ICE 를 타면 된다고... ICE 는 미리 예약을 해왔는데 잠깐 동안 환승시간동안 가능한가? 싶어 


역무원에게 물어보니 '패스 갖고 있음 일단 타세요' 라고 한다. 


어떻게 어떻게 프랑크푸르트 중앙역 도착하고 시계를 보니 10시... 


분명히 레버쿠젠에서 4시 조금 안되서 출발 했는데... 허허... 


마지막 밤의 여운을 즐기기 보다... 매우 피곤하다. 


맥주 한병 사들고 일단 들어간다. 좀 쉬자 이제 ㅋㅋ 


다음편에 계속... 

블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

보통 매치데이 전날 / 당일 / 다음날 에는 경기장 투어를 받지 않는다. 


덕분에 오늘 프랑크푸르트로 돌아가기 전, 알리안츠 아레나 투어를 가야한다. 


일어나자 마자 바로 알리안츠 아레나로 향한다. 


문이 잠겨있었는데... 잠깐 기다리니 사람들이 모인다. 대략 이곳이 맞는듯... 


조금 더 기다려 보니, 직원이 와서 문을 열어준다. 팬샵 / 기념관 쪽으로 향한다. 


다시 만난 알리안츠 아레나


팬샵에 가서 투어 신청을 하니, 1시간 반 정도 기다려야 할 듯... 


시간 될 때 까지 바이에른 뮌헨 기념관을 둘러본다. 


바이에른 뮌헨 기념관 입구


바이에른 뮌헨은 독일 최고의 명문 구단으로, 분데스리가 우승, 컵대회 우승 모두 최다 우승기록을 갖고 있다고 한다. 


한때 유럽에서는 3M(Madrid - Manchester - München) 이라고 불렸었다고 하니... 엄청난 구단이다. 


날짜이고, 시즌 끝날때 쯤 인거보니 대략 우승의 순간인듯... 


분데스리가 우승 트로피


챔피언스리그 트로피 '빅 이어'


좀 더 둘러보니 과거 코칭스태프, 현재 선수들 사진이 나온다. 


똘끼와 기행으로 유명한... 그 노이어


역대 감독들... 내가 아는 얼굴은 반 할 그리고 과르디올라 정도랄까?


FIFA Clup Worldcup 트로피


기념관을 볼 때마다 명문구단임이 확연하게 드러난다. 


분데스리가 트로피는 셀 수 없을 정도고, 빅이어, DFB Pokal 들도 너무 많다 허허.. 


둘러보면서 이것 저것 하다보니 어느덧 시간이 되었다. 


투어 대기존으로.... 잠깐 기다리니 가이드가 온다. 투어 시작이다.


룰루랄라~ 입장이다. 


미로를 지나는 듯... 가이드를 따라가다 보니 어느덧 2층이다. 런던/네덜란드에서 봤던 경기장들과 마찬가지로, 잔디 관련 일을 하고 있었다.


알리안츠 아레나 투어 중


우리 구장은요 쏼라 쏼라... 가이드 아저씨 



알리안츠 아레나는요~~


 가이드가 뭔가 설명을 열심히 하는 것 같은데... 뭔소린지 모르겠다... 영어 공부좀 더 해야겠다고 생각하며 사진이나 몇장 더 찍는다. 


투어 중에 찍은 스탠딩석...


이런 저런 설명이 끝났는지, 다음 장소로 이동한다... 


이동중에... 로벤, 토마스 뮬러 사진들이 보인다.


홈팀 라커룸


홈팀 / 원정팀 라커룸을 한번씩 둘러보며 가이드가 말한다. 


홈팀 라커룸은 상당히 밝고 좋은 기분이 들게 만들었지만, 원정팀 락커룸은 일부러 어둡고, 병원에 온 것 같은 기분이 들게 만들었다고... 


이런게 홈 어드밴테이지 인듯... 하긴 분위기야 어떻든 FIFA 규칙만 지키면 되니까.. 


가이드를 따라가다보니 어느덧 경기장 입장 통로 까지 와버렸다. 


이 투어도 이제 막바지를 향해 가는듯... 


선수 입장 통로


선수 입장통로, 내려와서 한장 더


믹스트 존, 티비에 나오는 인터뷰 장면들은 거의 여기서 촬영하는듯...


믹스트 존을 마지막으로 알리안츠 아레나 투어도 끝났다. 


시계를 보니 아직 여유가 있어, 여기 팬샵에서 조카 줄 유니폼 하나와 아버지 드릴 기념품(지갑) 을 산다. 


U반을 타고 호텔로, 체크아웃 하고, 지겹디 지겨운 커리부어스트를 또 먹고, 열차에 올라탄다. 


뮌헨역에서, ICE(이 체 에 라고 읽음)


4시간 정도 걸려서 프랑크푸르트 도착, 올때와는 다른 길로 온 듯.


프랑크푸르트 호텔에 들어가니 직원이 또 왔냐고 물어본다. 반가운건가? ㅋㅋㅋ 


짐을 풀고 저녁먹자... 


이제 이 여행도 이틀 남았다... 


내일은 레버쿠젠, '손흥민', '차범근', '바이엘 04 레버쿠젠' 이 연상되는 바로 그 도시다.


계속


블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

한국음식을 먹으러 가던 중, 


길거리가 시끌벅적 하다, 잠시 가서 보니 퍼레이드를 하고 있었다. 


잠시 가서 구경... 


뭔일이 있는걸까?



사람들을 보니 전부 아일랜드 국기 또는 초록색 계통으로 옷을 입거나 화장을 하고 있다. 


퍼레이드 행렬


자세히 보니, 오늘이 St. Patrick's Day 라고... 영어 배울 때 들었던 기억이 있다.


명절에 관한 수업이었는데, 3월 중에 St. Patrick's Day 라고 있다고 했다.


성 패트릭스 데이 (나무위키 링크, 여기를 클릭)


퍼레이드 행렬, 저건 뉴질랜드 국기인가?



이렇게 춤을 추며 가기도 하고


요런 옷을 입고 가기도 한다.



요런 포즈도 취해주는데... 사실 이 사진 내가 잘못찍은거다 하하...



북을 치면서 가기도 하고 


사람을 태워서 가기도 한다 


쿵짝쿵짝 아주 신났다~


행렬을 따라가 보고 싶기도 했지만, 일단 배가 너무 고프다. 근처 한국 식당에서 짬뽕 한그릇으로 점심을 해결한다. 


해결하고 정처없이 걷기 시작, 


뮌헨 광장의 분수대.... 


1유로 놓고 사진 몇장 찍음, CD 는 안샀다 ㅋㅋ 


누구지? 여튼 가다가 한장


그냥 보이는대로 걷다보니, 광장이 나타났고, 여기서 작은 축제가 열리고 있었다. 


St Patrick's Day 같은데... 아까 그 행렬이 여기까지 왔나보다... 


여기가 그 행렬의 종착지인듯... 


일단 사람들이 쓰고다니는 모자가 너무 갖고 싶었다. 


주변 사람들에게 물어보니, 맥주 한잔 마시면 주는거라고.... 근데 매진이란다... 에효... 


아쉬운대로 맥주 한잔 구매하고 축제를 즐겨보기로 한다. 


한잔의 기네스와 함께


드워프??? 


다들 친구 / 가족 / 연인 단위로 옷을 차려입고 다니는듯, 허락을 구하고 사진을 찍는다. 


행사 진행요원인듯.. ㅋㅋ 


친구들끼리 옷을 맞춰입고 나온듯.. 


돌아다니면서 공연도 보고 맥주 한잔 더 마시려는데... 기네스 아저씨가 날 부른다. 모자가 추가로 왔다고... 바로 모자 하나 주신다. 


고맙다고 인사하고, 기네스 한잔 더 주문... 무려 기네스다 ㅋㅋ 


이미지: 사람 4명, 이황춘님 포함, 모자, 실외

모자 득템


성 패트릭스 데이



기네스 팔던 아저씨, 나에게 모자를 주셨다. 


기네스만 한 4잔 정도 마셨던 것 같은데... 네번째로 가니 '얘 또 왔어...' 라는 표정이다.


가볍게 외쳐준다 ' I love guinness~' 


마지막 한잔 하고, 슬슬 숙소로 가기로 한다. 


연인인듯?


해가 슬슬 지기 시작한다. 술을 좀 마시기도 했고, 졸립다. 


숙소로 돌아가야지...


이렇게 뮌헨의 마지막 밤이 지나간다.


내일은 알리안츠 아레나를 둘러본 후, 프랑크푸르트로 복귀다. 


다음편에 계속 






블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

시차 적응이 슬슬 되가는듯... 이제 눈 뜨면 아침 일곱시다. 


잠깐 뒤척이다가 씻고 물 한잔 마시면서 정신을 차린다. 


오늘 계획은 근처의 BMW 박물관..


원래 그랬지만... 솔직히 말하자면... 독일 올 때 계획은 크게 세워두지 않았다. 


보고싶은것만 정했는데... 그게 아래 세개다. 


1. 아인트라흐트 프랑크푸르트 홈구장 가보기

2. 바이에른 뮌헨 축구 관람 

3. 레버쿠젠 홈구장 (바이아레나) 관람 


나머지 계획은 그때 가서 결정 하기로 했는데... 


어제 '유랑' 카페에서 만난 분들 추천으로 BMW 박물관에 가보기로 결정... 


일단 길을 나선다. 배도 고프고 역 앞에서 아침을 먹는다. 


뮌헨 중앙역 앞에서 먹은 커리부어스트 

독일이 특히나 웃겼던게... 별 관심 없을때엔 주변에 먹을게 그렇게 많이 보이더니... 


정작 배가 고파지면 커리부어스트 노점 밖에 안보인다 하하... 


가격은 참 착하지만 쉽게 배가 고파온다... 아마 탄수화물의 포만감을 느끼지 못해서 그런거다라고 살짝 생각하고 넘어간다. 


구글 맵을 켜고, BMW 박물관을 찾는다.. U반 (맞나?)를 타고 어찌어찌 가면 된다고 한다. 


U반 타러 가는 길


U반 역에서 사진을 좀 찍었는데... 집에와서 열어보니 핀이 전부 나갔다... 하하 그냥 마음속에 담겨두기로 하고. BMW 박물관으로 출발. 


Hauptbahnhof 역에서 Olympiazentrum 까지 이동... 


나와 보니 BMW 로고를 한 건물이 나를 반긴다. 


나를 반긴 BMW 건물, 사진이 좀 기울었다.



BMW 박물관 입구



박물관 안에 입장료를 내고 들어간다... 가격은 기억 안남... (무려 10개월 전 기억이라...)


이런 저런 조형물들이 날 반긴다. 


BMW 박물관 안에서..



BMW의 역사, 그리고 예전 부터 지금까지의 차/오토바이들이 전시되어있다.


차를 그렇게 좋아하는것도 아니고, 그렇다고 오토바이도 그닥이어서... 일단 사진만 좀 찍어둔다.


BMW 오토바이, 기억상 가장 처음이었는데, 제일 처음 만든 오토바이인듯?



비행기 엔진도 만들었었지...



BMW 오토바이, 지금은 디자인이 투박하긴 한데... 당시엔 꽤 세련된 디자인이였을수도...


조금 더 구경하다 보니 차도 나온다.


BMW 3/15 PS 라고 아래 친절히 적혀있음, 1930년산인듯.



이차는 좀 마음에 들었음, 영화에서 본 것 같기도 하고...



BMW 700, 1964년산. 이런 세단? 같은 종류도 만드는구나... 



BMW Z8 이건 멋있다... 한대 사고 싶군.. 후후


같은 전시장에 007 영화에 나왔던 자동차도 있었다. 


BMW Z3, 007 골든아이에서 주인공이 탔던 차다, 근데 차는 별로 안나왔음... 


귀여운 차... 이런차 한대 갖고싶긴 하지만 하하...


이런 차 몰아볼 날이 올까 과연? ㅋㅋ


확실히 자동차 좋아하는 사람들이 오면 좋아할 만한 곳 같아보인다.. F1 참여했던 기록도 있고 그렇다. 


이런 저런 구경을 마치고, 바로 옆의 BWM 홍보관 같은데엘 가본다... 


BWM Welt 인가? 암튼 길건너 넘어간다. 


길 건너 BMW Welt


사실대로 말하자면, BMW 박물관이 있는 곳은, 올림픽 공원이었다. 뮌헨 올림픽 경기장도 보여서 근처를 산책 하면서 사진도 몇장 찍고 했는데... 


필자의 시간이 허락하지 않아 사진을 다 못 담게 되어 아쉽다... 나중에 기회될 때 B 컷 대방출 해봐야겠다... 


여튼 BMW Welt 로 들어간다.. 여긴 BMW 그룹의 차들을 모두 전시해두고 있었다. 몇몇 차는 실제로 타볼 수도 있다. 


BMW M4, 멋지다...


이건 M2, 밟으면 밟는대로 쭉쭉 나가려나... 후후...


운전석에서, 난 또 언제 이런 운전석에 앉아보나... 


 다른 한 편에는 MINI 매장이 있었다. 구경 좀 더 해본다.


미니, 어우 예쁘네... 


주변의 자동차광한테 들어본 바... '미니는 감성이 좋아' 라고 했는데... 


실제로 운전석에 앉아보니 아날로그 느낌이 나는게 너무 좋다.





운전석, 빨간색이 시동버튼이다.


BMW 3 Gran Turismo



바로 옆에는 BMW 의 하이브리드카, i8 가 있었다.


BMW 8i


사진을 찍다보니 점심시간이 훌쩍 넘어갔다.... 


배가 심하게 고파, 이번엔 한국음식을 먹기로... 다행히 찾아보니 근처에 한국음식점이 있다.


이곳으로 가보기로 한다... 



다음편에 계속

블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,