According to the United States Census Bureau, the town has a total area of 81.5 km² (31.5 mi²). 25.6 km² (9.9 mi²) of it is land and 55.9 km² (21.6 mi²) of it is water. The total area is 68.56% water. It is bordered on the west by Hingham and Hull and on the east by Scituate, all of which are part of Plymouth County.
As of the census of 2000, there are 7,261 people, 2,673 households, and 2,012 families residing in the town. The population density is 283.5/km² (734.4/mi²). There are 2,805 housing units at an average density of 109.5/km² (283.7/mi²). The racial makeup of the town is 98.20% White, 0.18% African American, 0.07% Native American, 0.76% Asian, 0.03% Pacific Islander, 0.19% from other races, and 0.58% from two or more races. 0.69% of the population are Hispanic or Latino of any race.
There are 2,673 households out of which 36.4% have children under the age of 18 living with them, 64.8% are married couples living together, 7.9% have a female householder with no husband present, and 24.7% are non-families. 21.9% of all households are made up of individuals and 10.4% have someone living alone who is 65 years of age or older. The average household size is 2.69 and the average family size is 3.16.
In the town the population is spread out with 27.9% under the age of 18, 3.5% from 18 to 24, 26.6% from 25 to 44, 26.6% from 45 to 64, and 15.3% who are 65 years of age or older. The median age is 41 years. For every 100 females there are 93.1 males. For every 100 females age 18 and over, there are 87.4 males.
The median income for a household in the town is $84,156, and the median income for a family is $100,137. Males have a median income of $79,045 versus $41,397 for females. The per capita income for the town is $42,909. 2.8% of the population and 1.2% of families are below the poverty line. Out of the total people living in poverty, 2.3% are under the age of 18 and 5.7% are 65 or older.