In
computer science,
separation of concerns (
SoC) is a design principle for separating a
computer program into distinct sections, such that each section addresses a separate
concern. A concern is a set of information that affects the code of a computer program. A concern can be as general as the details of the hardware the code is being optimized for, or as specific as the name of a class to instantiate. A program that embodies SoC well is called a
modular program. Modularity, and hence separation of concerns, is achieved by
encapsulating information inside a section of code that has a well-defined interface. Encapsulation is a means of
information hiding. Layered designs in information systems are another embodiment of separation of concerns (e.g., presentation layer, business logic layer, data access layer, persistence layer).