Sahin, 22, is the third young Bundesliga star to have been signed lately by Real Madrid coach Jose Mourinho, following in the footsteps of Mesut Özil and Sami Khedira.
The clubs did not reveal how much Real would pay, but Sahin's contract with Dortmund reportedly stated that he could leave the club if there was an offer of at least €10 million from outside Germany.
Sahin, who plays for the Turkish national team despite growing up in Germany, announced his move at a press conference Monday in Dortmund.
“This decision was very, very difficult for me. But I will always remain a fan and a member of Borussia,” said Sahin, who has been with the club since the age of 12.
“I didn't choose Real Madrid for money,” he said, according to Real Madrid's website. “I chose it because it's the greatest club in the world. It's impossible to say ‘no' to its history and current project. Jose Mourinho convinced me immediately. We met here in Dortmund one day. He is one of the best coaches in the world and I'm dying to work with him. It will be a great challenge.”
Spanish media reported on Monday that Real were also looking to buy Bayern Munich midfielder Hamit Altintop, another Turkish international.
Sahin's arrival will add to the depth of talent in the midfield, putting him in competition with Khedira who is a defensive midfielder like Sahin. Other Real midfielders Fernando Gago, Sergio Canales and Pedro Leon, who were little used this season, may move on from the club.
Real described Sahin as a “Bundesliga sensation” in a statement on its website.
“Nuri Sahin is a talented, young midfielder fresh off a German Bundesliga title,'' it said. ''The German-born Turk has a knack for distributing the ball as well as recovering it. With a powerful left foot and an eye for ball placement, he is also a master at free-kicks.”
Sahin set a record in 2005 as the youngest player ever to play for the Bundesliga at age 16 years, 335 days and also the youngest scorer, netting against Nuremberg three months into his career. He is the youngest player both to play and to score for Turkey.
Many regard him as the best Bundesliga player of the season.
He has played for Dortmund since he was 12, playing 135 Bundesliga matches and scoring 13 goals, six of them this season as Dortmund claimed its first Bundesliga title since 2001-02.
But he missed the last three matches for Dortmund because of a right knee injury he picked up against Freiburg in mid-April.